0

新しいビットマップのコードがありますが、delete を使用すると、タスク マネージャーのメモリ使用量が減りません。

私のコードは以下の通りです

Bitmap* pBuffer = new Bitmap(pMainImage->GetWidth(),  pMainImage->GetHeight());
delete pBuffer;

上記のpBufferを適切に削除するには? したがって、メモリ使用量は new Bitmap() が呼び出される前のレベルに戻ります。

4

1 に答える 1

2

これは、Windowsメモリマネージャの動作方法ではありません。メモリを解放すると、ヒープブロックは「未使用」としてマークされます。次の割り当てに使用できます。フリーブロックを合体さ、仮想アドレス空間をデコミットしますが、そうすることは急いでいません。使用する正確なルールは文書化されておらず、オペレーティングシステムのバージョンによって異なります。

それ以外の場合、タスクマネージャーは、実際に使用されている仮想メモリの信頼できる指標となることはできません。何よりも、それは簡単ではないからです。HeapWalk()API関数はそれを実行できますが、実際に使用すると有害な副作用があるという強い警告が表示されます。それを安全にするためにあまりにも多くのロックをとらなければならないことが原因です。すべてのスレッドをフリーズするデバッガーだけが、これらの副作用なしにそれを実行できます。Windbgの!heapコマンドのように。

于 2013-01-23T04:31:26.697 に答える