2014-05-19 31 views
6

我有一個應用程序,它的內存隨着我運行的測試用例而增加。這顯然導致我相信我的應用程序正在泄漏內存。所以我在我的應用程序上運行valgrind,並且出人意料地發現它沒有泄漏。私密髒內存可能是泄露內存的指示嗎?

我不知道爲什麼我的進程的內存泄漏,所以我看着我的過程 的smaps文件及以下,如果我發現了什麼有趣的

08426000-42f56000 rwxp 00000000 00:00 0         [heap] 
Size:    961728 kB 
Rss:    960252 kB 
Pss:    960252 kB 
Shared_Clean:   0 kB 
Shared_Dirty:   0 kB 
Private_Clean:   0 kB 
Private_Dirty: 960252 kB 
Referenced:  960252 kB 
Anonymous:  960252 kB 
AnonHugePages:   0 kB 
Swap:     0 kB 
KernelPageSize:  4 kB 

爲了對這些數字我做了一些研究的意義關於Private_Dirty內存,大多數文章指出這是由於內存昂貴而尚未釋放的內存。

這似乎表明,這些只是應用程序釋放的內存,但仍然被操作系統阻擋。

有人能幫我更好地理解private_dirty嗎?這可以表明我有內存泄漏嗎?

感謝

+0

請問內存清理步驟之後和程序退出之前變得越來越小?這聽起來像是你正在堅持一些與測試案例相關的東西,這會導致記憶被保留。你是直接使用共享指針還是處理內存管理? – Jiminion

+1

有什麼私人骯髒的描述[這裏](http://stackoverflow.com/a/17596928/2096401):基本上你的過程已經「使用」(寫入)的內存,以便它需要保存如果換出來爲另一個進程騰出空間。本身並不表明你正在泄漏記憶。 – TripeHound

+0

也許你正在分配大量的小內存然後釋放。我無法預測太多,但是它與內存碎片有什麼關係? –

回答

0

這似乎是內存等待被寫入到磁盤,爲此,系統需要一些時間這樣做。您的程序必須產生大量寫入磁盤文件的結果。

What is dirty private memory?