配列用のメモリはスタック領域に作成されるが,メモリのサイズは2MBしかないので小さな配列しか確保できない。
もっと大きな配列を確保するには以下の方法を用いる。
stack領域は,windowsの場合は2MB,ubuntuでは8MB(設定によるかもしれない)であった。
double の実数は8バイトだから,26万個の配列でwindowsのスタック領域を超えてしまう。
したがって,これより配列のサイズが大きいときはスタック領域を大きくしないと実行時にエラーが起こる。
(1) ubuntuの場合(Vmware上のubutu13.10 64bit)
(a) 下記,コマンドをシステムコンソール画面から入力する。
$ulimit -s unlimited
プログラムの実行は,コンソール画面から行う。eclipse 上から実行するとエラーで停止する。
(2)ubuntuとwindowsの場合
コンパイラでスタックサイズを指定する。
g++ -Wl,--stack,10485760 a.cpp
a.cppをスタックサイズを10MBとして,コンパイルする。
ubuntuの場合は上記方法で実行できる。
windowsの場合は,Msysから上記コマンドでコンパイルするとスタックサイズが大きくなるが,eclipseからコンパイルしてもスタックサイズは大きくならなかった。
参考文献
http://d.hatena.ne.jp/takehr/20111109/1320836412
http://www.ecs.shimane-u.ac.jp/~stamura/MinGW-gsl.html