use*_*ser 7 c c++ application-development
当我输入ulimit -s终端时,它显示8192. 这是否意味着在我的 C 代码中我只能有 8192 字节的局部变量?
我很困惑哪个堆栈大小。ulimit -s当我们修改它的值时会改变吗?
Jan*_*ary 11
首先,它是 8192千字节,而不是字节。此外,堆栈是一回事,变量是另一回事,而堆又是另一回事。例如,请参阅堆栈和堆之间差异的解释或此页面。据我所知,堆栈用于局部变量和短期变量,使用堆栈还是堆取决于编译器。
据我所知,如果您使用[mc]alloc和朋友分配内存,则不会触及堆栈,并且限制不成立。
但是,是的,在ulimit -s等于 8192处尝试以下操作将导致分段错误:
#include <stdlib.h>
int main() {
char foo[10000000] ;
foo[0] = 'a' ;
exit( 0 ) ;
}
Run Code Online (Sandbox Code Playgroud)
在这里,变量foo太大了。
$ gcc test.c
$ ./a.out
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
但是,如果您更改 ulimit(例如ulimit -s 16000),它将起作用。
| 归档时间: |
|
| 查看次数: |
13845 次 |
| 最近记录: |