当我ulimit -s
在终端中输入时,它显示8192
。这是否意味着在我的 C 代码中我只能有 8192 字节的局部变量?
我对堆栈大小感到困惑。ulimit -s
当我们修改其值时会改变吗?
答案1
首先是8192公斤字节,而不是字节。此外,堆栈是一回事,变量是另一回事,堆又是另一回事。参见这个解释例如,栈和堆之间的区别,或者这一页据我所知,堆栈用于局部和短暂变量,并且是否使用堆栈或堆取决于编译器。
据我所知,如果您使用[mc]alloc
和朋友来分配内存,那么您就不会触及堆栈,并且限制不成立。
但是是的,尝试在等于 8192 的情况下执行以下操作ulimit -s
将导致分段错误:
#include <stdlib.h>
int main() {
char foo[10000000] ;
foo[0] = 'a' ;
exit( 0 ) ;
}
这里,变量foo
太大了。
$ gcc test.c
$ ./a.out
Segmentation fault (core dumped)
然而,如果你改变 ulimit (例如ulimit -s 16000
),它就会起作用。