如何验证两个检查点之间是否已释放所有内存分配?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何验证两个检查点之间是否已释放所有内存分配?相关的知识,希望对你有一定的参考价值。

我有一个似乎在泄漏记忆的过程。进程运行的时间越长,它使用的内存就越多。尽管该过程主要包括一个循环,该循环迭代地调用一个不应该在调用之间保留任何数据的函数。当我使用valgrind来检查泄漏时,一切都回来了。运行几个小时后进程最终退出时,退出时会有很大的延迟,这使我相信内存正在该函数中分配,并且不会立即释放,因为它仍然被引用。然后在退出时释放内存,因为该引用最终被释放。

我想知道是否有一种方法与valgrind(或其他一些兼容Linux的工具)在两个代码检查点之间进行泄漏检查。我想获得所有已分配但未在两个代码检查点之间释放的内存的泄漏报告。

答案

几年前我写了一篇article

简而言之,你包括valgrind.h然后你可以使用像

VALGRIND_DO_LEAK_CHECK

或者,您可以附加gdb并发出'monitor leak_check'命令。这可以是增量的。见here

以上是关于如何验证两个检查点之间是否已释放所有内存分配?的主要内容,如果未能解决你的问题,请参考以下文章

如何手动释放Linux内存?

如何检查是不是使用 malloc 或 new 分配了内存

检查指针是不是已分配内存

Java基础-1

确保释放 OpenGL 纹理内存

linux采用啥方法实现内存的分配和释放