繁体   English   中英

使用 valgrind 时内存泄漏消失

[英]memory leak disappears when using valgrind

我们有一个复杂的算法,它处理 OpenCV 图像,从而分配和释放几 GB 的内存,主要是 cv::Mat,每个大约 10MB 大小。 如果我们在 valgrind 下迭代运行(使用 --tool=massif 或 --tool=memcheck),每次迭代后内存占用都会返回相同的值(+-1MB),并且没有发现明显的内存泄漏。 通过 ps 或 pmap 从外部观看或通过 /proc/self/status 从内部观看也显示 2.3GB 的最大占用空间没有增加。

然而,如果我们在没有 valgrind 的情况下运行相同的软件,那么内存占用(通过 ps 或 pmap 从外部检查或通过 /proc/self/status 从内部检查)随着每次迭代增加大约几百 MB,在几次迭代后很快达到 5BG。

因此,我们有一些看起来像内存泄漏的东西,但是 valgrind 对查找原因没有帮助。 这可能是什么?

(这是 Ubuntu 下的 C++)。

感谢@phd 的评论,我找到了解决问题的方法:使用 tcmalloc 显着减少了内存占用(使用 2.5GB 而不是 6GB)。 见附图

使用不同 malloc 库的 RSS 内存

tcmalloc 或 jemalloc 的内存使用量似乎仍然略有增加,但至少对于我们通常拥有的迭代次数来说是可以的。

仍然想知道 malloc 怎么会浪费这么多资源。 我试图用 malloc_info() 找出答案,但没有成功。 我怀疑内存碎片和/或多线程在这里起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM