bool hoge[2077010];こんな形で、配列を作ったのだと思いますが、あってますでしょうか?
他の方が言われているように、malloc()等を使わず、staticではないローカル変数として配列を作った場合、スタック領域に作成されます。スタック領域のサイズはリンク時(コンパイル時ではありません)に決められます。手元のMacでは8MBがデフォルトになっていました(デフォルトはOSやリンカによって異なります)。これはリンカへのオプションで変更できます(やり方はリンカによって異なります)。このスタックサイズをこえてメモリを確保しようとすると、実行時にエラーになります。
※ コンパイルとリンクの関係は下記が一番わかりやすいかなと思います。
http://www.curiocube.com/mikata/hello/ch14_complink.php
※ スタックなどのメモリを確保する領域の話は、下記がいいかなと思います。
http://oresi.hatenablog.com/entry/2014/04/24/133315
なお、C言語の仕様としては配列のサイズに特に制限は無いようです。ただ、sizeofでサイズを取得できる必要があるため、size_tの範囲が限界になるかと思います。しかし、size_tは通常void *と同じ大きさですので、実質メモリが許す限りになります。手元のclangではどんなに大きくてもコンパイルエラーにはなりませんでした(実行すれば、スタック領域不足でエラーになりますが)。
最後に、boolは最低0と1を確保できるサイズと定義されているため1bitでもいいと思われますが、C言語ではメモリをcharのサイズ(1Byteと同じ)の倍数でしか確保できないため、少なくともcharのサイズ以上になります。ですので、bool hoge[2077010];は2077010bitsではなく、最低でも2077010Bytes以上です。
退会済みユーザー
2015/08/27 17:21