【C++】mainなどの関数の中では大きな配列を確保できない

Jun 17, 2015  

これがSegmentation faultになるのに対して

これは正しく実行される。

グローバル変数はヒープに取られるのに対して、
ローカル変数はスタックに積まれていく。
スタックのサイズは制限されていることが多く、
(bashならulimit -aで確認できる。8192KBだった)
bool型は1byteなので配列のサイズは10000001/1024≒9765KBとなり
スタックのサイズ制限を超えてしまうので、
メモリリミットより小さいがローカル変数として確保できない。

[参考]
http://homepage2.nifty.com/well/Variable.html

[2015/6/30 追記]
newでもいけるということをコメントで教えて頂きました。
なるほど確かにnewでもヒープに確保されますね。
newでいけるということは中でnew使ってくれてるvectorでもいけます。
ご指摘ありがとうございました!

このエントリーをはてなブックマークに追加