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

How do I verify that all memory allocations have been freed between two checkpoints?

我有一个进程似乎在泄漏内存。进程运行的时间越长,它使用的内存就越多。尽管该过程主要由一个循环组成,该循环迭代地调用一个不应在调用之间保留任何数据的函数。当我使用 valgrind 检查泄漏时,一切都恢复正常。当进程在 运行 几个小时后最终退出时,退出时有相当长的延迟,这一切让我相信内存正在该函数中分配,而不是立即释放,因为它仍然被引用。然后在退出时释放内存,因为该引用最终被释放。

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

几年前我就此写了一篇article

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

这样的宏

VALGRIND_DO_LEAK_CHECK

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