【问题标题】:Deleting GDIPlus Bitmap cannot reduce memory usage删除 GDIPlus 位图不能减少内存使用
【发布时间】:2013-01-25 11:56:44
【问题描述】:

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

我的代码如下

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

如何正确删除上面的pBuffer?所以内存使用会回到调用 new Bitmap() 之前的水平。

【问题讨论】:

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

标签: c++ gdi+


【解决方案1】:

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

任务管理器不能作为实际使用中虚拟内存的可靠指标。最重要的是因为这并不容易做到。 HeapWalk() api 函数可以做到这一点,但带有一个强烈的警告,即实际使用它会产生有害的副作用。原因是它必须使用太多锁才能确保安全。只有冻结所有线程的调试器才能做到这一点而不会产生这些副作用。就像 Windbg 的 !heap 命令一样。

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2010-11-11
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多