簡體   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