オブジェクトが許可された仮想アドレス空間(Win32では2Gb)より多くのメモリを割り当てようとします。 std::bad_alloc
が捕捉され、オブジェクトが解放されます。プロセスのメモリ使用量が低下し、プロセスは続行されます。ただし、以降のメモリ割り当ては、別のstd::bad_alloc
で失敗します。 VMMapを使用してメモリ使用量を確認すると、ヒープメモリは解放されたように見えますが、実際には空き領域が残っていないためプライベートとしてマークされています。やりたいことは、終了して再開するようだ。私は断片化の問題を理解するだろうが、なぜ、プロセスがリリース後にメモリを戻すことができないのだろうか?オブジェクトが破棄されているにもかかわらずbad_allocをキャッチした後に「プライベートメモリ」が解放されない
オブジェクトは、QList
がQList
です。アプリケーションはマルチスレッド化されています。私は小さな再生器を作ることができましたが、問題を1回だけ再現することができましたが、ほとんどの場合、再生されたメモリは解放されたメモリを再び使用できます。
Qtは何か卑劣なことをしていますか?それとも、それはリリースを遅らせるwin32ですか?
win32「VirtualFree(p、0、MEM_RELEASE)」を呼び出すと、関数が返るときにメモリが解放されます( 'p'が正しい場合) - 100%' VirtualFree'呼び出されていないか、悪い引数で呼び出されました – RbMm
** QListの 'QList'は何ですか?それはここで重要なことです。 QVariantの –
これは基本的にスプレッドシートです。通常、文字列またはURLの形式で数値が含まれます。 – Narcolessico