我有一个新的Bitmap代码,但是当我使用delete时,任务管理器中的内存使用量没有减少。
我的代码如下
Bitmap* pBuffer = new Bitmap(pMainImage->GetWidth(), pMainImage->GetHeight());
delete pBuffer;
如何正确删除上面的pBuffer?因此,内存使用量将返回到调用新Bitmap()之前的级别。
答案 0 :(得分:2)
这不是Windows内存管理器的工作方式。释放内存时,堆块只会被标记为“未使用”。可用于下一次分配。它 合并空闲块并解除对虚拟地址空间的拒绝,但并不急于这样做。它使用的确切规则没有记录,因操作系统版本而异。
任务管理器无法成为可靠的实际虚拟内存使用指标。最重要的是因为这并不容易。 HeapWalk()api函数可以做到这一点,但附带强烈警告,实际使用它会产生有害的副作用。由于必须使用太多锁才能使其安全。只有一个冻结所有线程的调试器才能在没有这些副作用的情况下完成。就像Windbg的!heap命令一样。