找到在出口处消失的泄漏

finding leaks that disappear at exit

我正在开发一个 C++ 程序。该程序有时似乎会泄漏。然后它的大小突然增长了 2/3 倍,并且一直增长到内存不足。 “运行 它在 valgrind 中”你会说。我知道,但奇怪的是,在退出时,它显示“只有”0.5MB 的泄漏。不是我使用“top”(RSS) 看到的千兆字节。

该程序是一个监控10个网络摄像头的程序。它们产生恒定的 fps、恒定的分辨率、rtsp 或 mjpeg 流。一切都没有改变。时间段是:连续使用内存的天数(!),然后内存使用量突然开始增长:

所以现在的问题是:关于如何解决这类问题有什么技巧吗?

valgrind 提供了多种方法来跟踪稍后释放的内存分配。

要查看内存峰值,您可以例如使用 valgrind massif 工具。

要查看哪个代码allocates/deallocates占用大量内存,您可以例如使用 memcheck 选项 --xtree-memory=full 并使用 kcachegrind 可视化生成的文件。