– ulimit -s で得られる、スタックの限界サイズを超えた場合、最初の代入を行った時点で Segumentation Fault (core dumped) になる。
例えば、
$ ulimit -s
65536
の時、次のようなコードで発生する。
/* オプティマイズされると処理がなくなるため、
* gcc -O0 を付けてコンパイルすること。
*/
int main(int argc, char* argv[]){
char ac[64 * 1024 * 1024];
ac[0] = ‘\0’; // ここで発生
return 0;
}
対策は、
ulimit -s [limit]
で十分なスタックサイズを確保することを許可すればよい。