堆大小不断增加,直到应用程序崩溃(C ++)

时间:2014-02-11 13:30:29

标签: c++ linux memory memory-leaks heap-memory

我想咨询这个问题

我有一个我正在运行的程序,从长远来看,它的内存不断增加,直到所有资源都耗尽,当然它崩溃了(需要几天才能达到临界大小)。

我到目前为止所做的是使用Valgrind,找到所有内存泄漏并修复它们,但是现在我仍然有一个由堆增加大小引起的小内存泄漏,为此我使用了Valgrind massif工具。 / p>

问题是当我使用massif时,它不能运行太长时间,并且它会导致应用程序在几个小时后崩溃。 我试图找到一小时运行的内存泄漏,最小阈值不能从内存的1%降低的问题,1小时后我可以看到内存增加,但它仍然比应用程序的其余部分小。 所以我可以看到需要更多内存的部分,但我看不出哪些部分

example in valgrind output file:
->03.11% (4,377,152B) in 28 places, all below massif's threshold (01.00%)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用google perftools
您可以链接您的程序甚至LD_PRELOAD库,它将分析您的堆使用生成快照,它不会占用您的性能,当您看到堆已经太大时,您可以停止它并获取图形记忆花费的地方。

编辑: tutorial here

实施例: enter image description here

答案 1 :(得分:0)

你有没有使用valgrind -leak-check - 满?你在使用什么可以使用内存?你删除了每一个新的吗?

也许你崩溃了,因为你一次分配了一个巨大的内存空间(以前发生在我身上),而valgrind有时候看不到它。

无论如何,这是“奇怪的”,如果你找到它,请告诉我们答案!

相关问题