通过 ulimit -s 修改堆栈大小

通过 ulimit -s 修改堆栈大小

当我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),它就会起作用。

相关内容