首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到不是内存泄漏的内存泄漏?

如何找到不是内存泄漏的内存泄漏?
EN

Stack Overflow用户
提问于 2021-05-26 12:46:30
回答 2查看 67关注 1票数 0

我有一个很大的程序,我注意到内存在稳步增长,直到我的机器无法处理它,我必须重新启动它。

通常这会是一个内存泄漏,但是我使用了libasan和valgrind,这两个都找不到泄漏。

我怀疑的是,在代码内部的某个地方,由于一个逻辑错误,一个动态结构在不受控制的情况下增长。例如,一个向量被一次又一次地保留了更大的值。就As而言,这不是一个内存泄漏,因为它在程序终止时会被清除,但会有完全相同的效果。

可以使用哪些工具来尝试识别内存中的哪些对象最大?即试图定位实际上不是泄漏的“内存泄漏”。

EN

回答 2

Stack Overflow用户

发布于 2021-05-26 23:34:03

试试https://github.com/vmware/chap

它将帮助您,因为它计算分配之间的引用图,并识别std容器使用的许多不同类型的分配。

在没有指令插入的情况下运行您的进程,直到它比您预期的要大得多,然后使用gcore收集一个活动的核心,在chap中打开该核心,并从https://github.com/vmware/chap/blob/master/USERGUIDE.md#analyzing-memory-growth中的建议开始。

票数 1
EN

Stack Overflow用户

发布于 2021-05-27 01:23:20

我被推荐在linux上使用heaptrack和heaptrack_gui来解决这个问题,它做的正是我需要解决这个问题的地方。它根据调用层次结构向您显示内存分配的火焰图,以便您可以逐个调用地缩小您可能过度分配的范围。

对于好奇的人来说,我的应用程序中的潜在问题是一个奇怪的vulkan图像,我忘记了释放它的内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67698661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档