使用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((找出答案,但没有成功。我怀疑内存碎片和/或多线程在这里起作用。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 将地址分配给本地指针后,公共对象的变量将消失
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- Klocwork Inside的资源泄漏
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 应用投影矩阵后对象消失
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 使用Valgrind时内存泄漏消失
- 使用float 2d数组的C++内存泄漏,如果我使用double,则会消失
- MFC HBITMAP 内存泄漏不会消失