ターミナルでulimit -s
と入力すると、8192
と表示されます。私のCコードでは8192バイトのローカル変数しか持てないということですか?
スタックサイズがわかりません。値を変更すると、ulimit -s
は変わりますか?
まず、8192kiloバイトであり、バイトではありません。さらに、スタックはあるもの、変数は別のもの、そしてヒープは別のものです。たとえば、スタックとヒープの違いの この説明 、または このページ を参照してください。私の知る限り、スタックはローカル変数と短命変数に使用され、スタックまたはヒープが使用されるかどうかはコンパイラに依存します。
私が知る限り、[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
)を変更すると、機能します。