C++ 删除GDIPlus位图无法减少内存使用

C++ 删除GDIPlus位图无法减少内存使用,c++,gdi+,C++,Gdi+,我有一个新位图的代码,但是当我使用delete时,任务管理器中的内存使用并没有减少 我的代码如下 Bitmap* pBuffer = new Bitmap(pMainImage->GetWidth(), pMainImage->GetHeight()); delete pBuffer; 如何适当地删除上面的pBuffer?因此,内存使用将返回到调用new Bitmap()之前的水平。这不是Windows内存管理器的工作方式。释放内存时,堆块只会被标记为“未使用”。可供下次分配。它

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

我的代码如下

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

如何适当地删除上面的pBuffer?因此,内存使用将返回到调用new Bitmap()之前的水平。

这不是Windows内存管理器的工作方式。释放内存时,堆块只会被标记为“未使用”。可供下次分配。它确实合并空闲块并解除虚拟地址空间,但并不急于这样做。它使用的确切规则没有文档记录,并且因操作系统版本而异


否则,任务管理器无法使作业成为实际使用的虚拟内存的可靠指示器。最重要的是,这并不容易做到。HeapWalk()api函数可以做到这一点,但附带了一个强烈的警告,即实际使用它会产生有害的副作用。这是因为它需要太多的锁才能保证安全。只有冻结所有线程的调试器才能在没有这些副作用的情况下执行此操作。就像Windbg的一样!堆命令。

在释放内存后,任务管理器显示的内容不会减少。这是新的分配。