C ++アプリはメモリを超えていますが、仮想メモリは使用しません
-
27-09-2019 - |
質問
メモリを「新しい」で割り当てるアプリケーションがあり、コードの一部の部分で「削除」でそれらを解放します。問題は、システムのメモリ限界(2GBとしましょう)を超えると、Windowsがプロセスにキル信号を送信することです。スワップスペースを使用する必要があるため、普通ではないと思います(Windowsでは仮想メモリと呼ばれていると思います)。私のアプリケーションはC ++/Visual Studioで書かれています。
解決
プロセスのために最大3GBを作成する方法は次のとおりです;これは、32ビットのWindowsアプリのためにそれを持つことができる絶対的な最大です。それ以上になり、64ビットバージョンのWindowsを使用する必要があります。
それは多くの記憶です。たぶん、あなたはあなたのアプリを複数のプロセスに分割し、それらの間で通信することを検討することができるかもしれません。
他のヒント
OSはアプリを殺しません、と考えられていない例外はそうです。 Perfmonでアプリを調べて、これらのカウンター、ワーキングセット、仮想バイト、プライベートバイトを視聴する必要があります。予約済みのバイトが2GBに近づくと、例外が得られます。したがって、コミットしたバイトとRAMバイトははるかに少ないです。
これは、コミットされたvs予約済みを含む仮想アドレススペースに関する素晴らしい記事です。
ストーリーの教訓は、32ビットプロセスのために、予約されたバイトが2GBに近づいたときに割り当てようとしないでください。
Windowsは信号を使用しません。メモリがなくなったら、STD :: BadAlloc例外を取得する必要があります。 contしていない場合、ターミネート()関数を自動的に実行します。例外は、出力ウィンドウに表示されます。
私はこれをあまりよく見ていませんが、ここであなたが望む答えを見つけるかもしれません: