流れるまにまに。

自分で学んだこととか、誰かに教わったこととか、誰かに教えたこととか。

【C/C++】アプリのメモリ不足対策

32bitアプリで大きい画像ファイルを何枚も、newしたメモリに読み込んでたら、bad_allocで落ちました。
newなのでヒープ領域に展開するのだけど、ヒープ領域が足りなくなったのだろう。という結論に。

ヒープの詳しい説明や活用は以下参考。
https://msdn.microsoft.com/ja-jp/library/ms810466.aspx


どんなにメモリを積んだPCでも、通常1つの32bitアプリで利用可能なメモリ容量は2GB。
色んなdllを使ったり、newしていたりしたので、すぐメモリが枯渇していたみたいです。



そんな時の対策として、VisualStudioで作成している32アプリの場合、「LargeAddressAwareオプション」なるものが存在し、64bit環境で動作させた場合に利用可能メモリを4GB程度まで増やすことが可能です。

プロジェクトのプロパティから、リンカー→システム→大きいサイズのアドレス
を「はい(/LARGEADDRESSAWARE)」に
f:id:piyomani:20170827235528p:plain



こうすることで、大きいサイズの画像をもりもり開いても落ちなくなりました!!
(4GBを超える勢いでもりもり開くとまた落ちるのだろうけど。そんなサイズ開く予定があるなら、ストリーミングな感じで開くやり方に変更するべきですよね。)

参考:http://www.webtech.co.jp/blog/optpix_labs/programing/6387/