【问题标题】:Delete in c++ program is not freeing up memory [closed]C ++程序中的删除不会释放内存[关闭]
【发布时间】:2013-01-10 18:59:52
【问题描述】:

我创建了一个对象,它有几个整数变量,一个 char 内存块说它分配了 300-500 字节的内存作为其成员。之后这个对象被一个线程推入向量,然后另一个并行运行的线程将与一个空向量交换并开始处理包含该对象的向量,在处理后我曾经删除对象中使用的字符块和还完成了对象并删除了对象。但似乎内存没有释放。我用 valgrind 工具运行了这段代码,它没有显示任何泄漏。请帮我解决一下

【问题讨论】:

  • 如果您在 valgrind 中运行它并且它没有显示任何内存泄漏,那么您为什么假设您正在泄漏内存?这个假设的依据是什么?顺便说一句,delete 不会释放任何内存,它会将内存块标记为空闲以供重新使用。
  • 程序执行完成后,该应用程序使用的内存不会减少。即,在通过运行 top 命令执行程序时,我发现我使用 500 MB 的 RAM 编写的应用程序在执行后应该立即下降,但它没有这样做
  • 您似乎正在使用任务管理器来跟踪内存使用情况。它并没有真正达到目的,也不是跟踪内存泄漏的正确方法。如果 valgrind 报告没有内存泄漏,请确保您没有。

标签: c++ memory-management memory-leaks valgrind delete-operator


【解决方案1】:

但似乎内存没有释放。

您是如何准确确定的?我假设不正确。调用delete whatever 将该内存标记为已释放并释放以供将来使用。该语言没有具体说明这意味着什么。你的操作系统比你更擅长管理内存。例如,不必强制确保您用于测量内存使用的任何工具(任务管理器?)现在可以看到 X 更多的空闲字节。

您正在使用的内存现在可以重新分配。这就是你需要关心的,让操作系统的内存管理器担心细节。

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2017-03-01
    • 2019-12-19
    相关资源
    最近更新 更多