0

コードの一部で「new」でメモリを割り当て、「delete」でメモリを解放するアプリケーションがあります。問題は、システムのメモリ制限 (2GB としましょう) を超えるたびに、Windows がプロセスに Kill シグナルを送信することです。スワップ領域(Windowsでは仮想メモリと呼ばれていると思います)を使用する必要があるため、通常ではないと思いますよね?私のアプリケーションは C++/Visual Studio で書かれています。

4

4 に答える 4

2

1 つのプロセスで 3GB にする方法を次に示します。これは、32 ビット Windows アプリで使用できる絶対最大値です。それ以上の場合は、64 ビット バージョンの Windows を使用する必要があります。

それは多くの記憶です。アプリを複数のプロセスに分割し、それらの間で通信することを検討できるかもしれません。

于 2010-08-10T17:57:57.787 に答える
2

OS がアプリを強制終了するのではなく、未処理の例外が強制終了します。perfmon を使用してアプリを調べ、これらのカウンター、ワーキング セット、仮想バイト、プライベート バイトを監視する必要があります。予約バイトが 2GB に近づくと、例外が発生します。したがって、コミットされたバイトと RAM バイトははるかに少なくなります。

これは、コミットされたものと予約されたものを含む、仮想アドレス空間に関する素晴らしい記事です。

この話の教訓として、32 ビット プロセスの場合、予約済みバイトが 2GB に近づいたときに割り当てようとしないでください。

于 2010-08-10T18:03:55.357 に答える
1

Windows はシグナルを使用しません。メモリが不足すると、 std::badalloc 例外が発生するはずです。キャッチされない場合、terminate() 関数が自動的に実行されます。例外は [出力] ウィンドウに表示されます。

于 2010-08-10T17:38:13.507 に答える
0

私はこれを詳しく見ていませんが、ここであなたが望む答えを見つけることができます:

c または c++ で非常に大きな単一のメモリ チャンク (> 4GB) を割り当てることができますか?

于 2010-08-10T18:03:32.837 に答える