配列サイズによるスタックオーバーフロー
エラーの内容
Cにおいて、double型の配列を1024*1024で確保した際、下記のエラーが出力された。
Segmentation fault: 11
原因
スタックに格納できる情報量を超えた配列を格納しようとしているため、スタックオーバーフローが起きている。
PCのスタックサイズの調べ方(Mac)
下記コマンドで調べられる。
$ ulimit -a
出力結果
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 256 pipe size (512 bytes, -p) 1 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 1418 virtual memory (kbytes, -v) unlimited
8Mほどのスタックサイズに8Mの配列を格納しようとしていたことが原因だったみたい。。
解決方法
下記コマンドでスタックサイズを変更することができる。
$ ulimit -s 65532 // スタックサイズを65MBに変更
※この変更は一時的な変更