使用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从内部进行检查)随着每次迭代的增加而增加,大约在数百兆之后几次迭代。

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

(这是Ubuntu下的C ++)。

deitysix 回答:使用valgrind时内存泄漏消失

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

RSS memory using different malloc libraries

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

仍然想知道malloc如何浪费这么多资源。我尝试使用malloc_info()进行查找,但是没有成功。我怀疑内存碎片和/或多线程在这里起作用。

本文链接:https://www.f2er.com/3045452.html

大家都在问