2013年9月23日月曜日

Windowsプログラムのメモリ不足

2013/8/16にLinuxプログラムがどれだけのデータ量を扱えるか実験してみました。そのときのサンプルプログラムをWindows7の32bit、64bit双方に移植してみて、動作を比較してみます。

1.Linuxの結果(復習)
1回400kBのmallocを8017回(3GB超)でmallocエラー(メモリ不足)になりました。

2.Windows7(32bit)の結果(Visual Studio 2010)
mallocを5275回(2GB程度)でmallocエラーとなりました。Linuxでいうheapにあたるデータエリアは2GBフルに扱えるようです。

3.Windows7(64bit)の結果(Visual Studio 2012)
mallocが5225回(2GB程度)でエラーになりました???あれ、ちょっと結果が予想と違います。デフォルトのplatformがwin32(32bit)なんですね、すぐに気づきました。ビルド→構成マネージャでビルドするバイナリのplatformを指定できるので、win32→x64に変更して再ビルドして実験です。
サンプルプログラムは10,000回のfor-loopをしますが、簡単に回りきって(メモリ取得に全部成功、4GB程度のメモリを取得)しまいました。

まあほぼ予想通りの結果が得られました。ちなみに上記3つの試験を行ったPCは全部別々です。Linuxは古いPCでメモリが1GBしかなかったので、サンプルプログラムの実行に結構時間がかかりました。Swapが結構発生していましたからね。(2分くらい。swapエリアは5GB設定してあり、2.5GBほど使ってmallocエラーになります。)
一方、Windows7(32bit)でも4GB、Windows7(64bit)は6GBのメモリを搭載したPCだったのでほとんどswapは発生しません。ちなみにswapを発生させるほどWindows7(64bit)でmallocの回数を増やしたところ、処理負荷がすごいことになりマウスも思うように動かなくなってしまい、途中終了させるのにかなり時間がかかりました。あいかわらずWindowsでSwapが発生すると、動作がひどい状態になります。(最近のPCは平気で4GBのメモリもっているのが多いので気づきませんが、swapの処理の重さが更にひどくなったような気がします)

0 件のコメント:

コメントを投稿