【问题标题】:When does the heap memory actually get released?堆内存何时真正被释放?
【发布时间】:2012-02-19 22:28:10
【问题描述】:

我使用 new as 分配内存,当我在我的一种方法和析构函数中接收数据时,我使用 delete 释放所有分配的内存。

但是,释放内存后,从任务管理器中,当我查看进程选项卡下的内存使用情况时,内存使用情况仍然保持不变。它不会给人一种内存正在被释放的印象。

那么,内存实际上是什么时候被释放的呢?找出进程实际使用的内存的最佳方法是什么。

谢谢

【问题讨论】:

  • 我很确定这是个骗子……
  • 这和MFC有什么关系?
  • Ben,我使用的是基于 VC++ 的代码。不确定,如果 Unix 表现不同。因此,为了清楚起见,我添加了标签 MFC。
  • 删除了 MFC 标签。离开了 C++ 和 Windows,尽管这个问题在大多数操作系统上的大多数编程语言中都很常见。
  • 任务管理器根本不是一个可靠的指示。

标签: c++ windows memory-management


【解决方案1】:

在大多数情况下,它永远不会在应用运行时返回给操作系统。之后,当然,所有资源都由操作系统回收。

[在 cmets 正确指出“从不”是很长一段时间后编辑...]

【讨论】:

  • “在应用程序退出”似乎与“从不”不同
  • 至少在进程存在时才返回,所以我不会称它为永远
【解决方案2】:

操作系统会为您的应用程序分配一个默认堆。此堆是在您的进程初始化期间分配的。因此,您的新建和删除不会影响您在任务管理器中看到的栏。

但是,如果您尝试初始化一个大缓冲区并且分配的堆不够,操作系统将为您的应用程序分配更多内存 - 这应该反映在任务管理器中...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2011-05-16
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多