当前位置: 技术问答>linux和unix
linux高手入,急,高分相赠!
来源: 互联网 发布时间:2015-08-30
本文导语: 我的环境是redhat 9.0,我现在在程序中定义了一个二维数组变量, char aa[32000][200] ; 这种情况下我的程序是可以正常运行的。 但是当我的数组变量开辟的空间再大点的时候, 如:char aa[60000][200] ; 程序就不能正常执行...
我的环境是redhat 9.0,我现在在程序中定义了一个二维数组变量,
char aa[32000][200] ;
这种情况下我的程序是可以正常运行的。
但是当我的数组变量开辟的空间再大点的时候,
如:char aa[60000][200] ;
程序就不能正常执行了。抛错,segement error。
我用root用户,ulimit命令查过,对每个用户进程所需要的资源已经是unlimited了。
问题到底是什么原因搞不清楚,请高手指点。谢谢。
char aa[32000][200] ;
这种情况下我的程序是可以正常运行的。
但是当我的数组变量开辟的空间再大点的时候,
如:char aa[60000][200] ;
程序就不能正常执行了。抛错,segement error。
我用root用户,ulimit命令查过,对每个用户进程所需要的资源已经是unlimited了。
问题到底是什么原因搞不清楚,请高手指点。谢谢。
|
你这样分配的内存是在堆栈上的,默认堆栈大小是10240kbytes, 也就是 10M.
可以用明令ulimite -s xxx 来设置堆栈大小,注意单位是kbytes.
我想你如果ulimite -s 20480 ,应该就不会segment fault了吧.:)
可以用明令ulimite -s xxx 来设置堆栈大小,注意单位是kbytes.
我想你如果ulimite -s 20480 ,应该就不会segment fault了吧.:)
|
栈空间大小有限制, 如果你不对其操作 没有任何对aa变量后分配地址的写操作
就不会溢出
但这样作也就没有意义了
还是从堆里分配吧
就不会溢出
但这样作也就没有意义了
还是从堆里分配吧