コードの一部で「new」でメモリを割り当て、「delete」でメモリを解放するアプリケーションがあります。問題は、システムのメモリ制限 (2GB としましょう) を超えるたびに、Windows がプロセスに Kill シグナルを送信することです。スワップ領域(Windowsでは仮想メモリと呼ばれていると思います)を使用する必要があるため、通常ではないと思いますよね?私のアプリケーションは C++/Visual Studio で書かれています。
4 に答える
1 つのプロセスで 3GB にする方法を次に示します。これは、32 ビット Windows アプリで使用できる絶対最大値です。それ以上の場合は、64 ビット バージョンの Windows を使用する必要があります。
それは多くの記憶です。アプリを複数のプロセスに分割し、それらの間で通信することを検討できるかもしれません。
OS がアプリを強制終了するのではなく、未処理の例外が強制終了します。perfmon を使用してアプリを調べ、これらのカウンター、ワーキング セット、仮想バイト、プライベート バイトを監視する必要があります。予約バイトが 2GB に近づくと、例外が発生します。したがって、コミットされたバイトと RAM バイトははるかに少なくなります。
これは、コミットされたものと予約されたものを含む、仮想アドレス空間に関する素晴らしい記事です。
この話の教訓として、32 ビット プロセスの場合、予約済みバイトが 2GB に近づいたときに割り当てようとしないでください。
Windows はシグナルを使用しません。メモリが不足すると、 std::badalloc 例外が発生するはずです。キャッチされない場合、terminate() 関数が自動的に実行されます。例外は [出力] ウィンドウに表示されます。
私はこれを詳しく見ていませんが、ここであなたが望む答えを見つけることができます: