g++でコンパイル時にスタックサイズを指定

データ処理をするプログラムで,コンパイルは通るのに実行時にSegmentation fault(core dumped)になってしまうことがよくある.

ポインタか?配列か?と自分のプログラミング能力の低さに苦しんでいたところ,どうやらコンソールでスタックサイズが制限されているため大規模データだと処理できなくなるらしい.
linuxなどではコンソールのコマンド"ulimit -s unlimited"といったように変更する事ができるが,cygwinだとこれができない.
("ulimit -s"でスタックサイズの確認は可能)

$ ulimit -s unlimited
bash: ulimit: stack size: cannot modify limit: Invalid argument

そこで,コンパイラ(g++)にスタックサイズを指定してやる.

g++ -Wl,-stack,10485760 xxx.cpp

gccだと"-stack"が"--stack"になったりするらしいが,そのへんはよくわからない.環境によるんだろうか?
ともかく,これで巨大データでも実行可能になる.

なお,"-Wl,"と"-stack"などの間にコンマを入れるとエラーになるので注意.