0

我有一个新位图的代码,但是当我使用删除时,任务管理器中的内存使用量并没有减少。

我的代码如下

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 回答