首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux的线程栈大小的限制导致的段异常

2013-11-13 
linux的线程栈大小的限制导致的段错误#include string.h#include stdio.h int main(){int a [10 * 102

linux的线程栈大小的限制导致的段错误

#include <string.h>#include <stdio.h> int main(){    int a [10 * 1024 * 1024];    a[0] = 1;    return 0;}

上面的代码运行就会crash。
原因:
ulimit -s

10240
可以看到linux配置的线程栈的大小为10M。
函数里面使用了两个大的数组,超出了linux线程栈大小配置的上限,而函数调用是需要栈的,当空间不足,导致越界,所以core掉。所以在函数中劲量少使用大的数据,而是使用堆分配内存。

为什么加上a[0] = 1;才会core,不加是不会core呢

因为在linux中,只有在使用时候才会分配内存,如果没有a[0]=1;并不会在栈上为a数组分配内存,所以不会导致core掉。
可以使用pmap工具来查看地址空间的分配状况。
附:使用inline时,最后不要在inline函数中申请大的数组,不然很容易出问题。

热点排行