簡體   English   中英

如何在linux中找到分配的內存

[英]how to find allocated memory in linux

大家下午好,

我想要實現的目標 :我想實現對C ++單元測試夾具的擴展,以檢測測試是否分配內存並且不釋放它。 我的想法是在測試之前和之后記錄分配級別或可用內存級別。 如果它們不匹配那么你就會泄漏記憶。

到目前為止我嘗試過的:我編寫了一個讀取/ proc / self / stat的例程來獲取vm大小和駐留集大小。 居民的體型看起來像我需要的但顯然不對。 它在連續調用函數之間發生變化,沒有內存分配。 我相信它會返回緩存的內存而不是分配的內存。 它也會以4k的增量變化,因此它太粗糙而無法實際使用。

我可以通過分配本地並保存它的地址來獲得堆棧大小。 這樣做有什么問題嗎?

有沒有辦法在Linux上獲得真正的免費或分配內存?

謝謝

您最好的選擇可能是使用專門為查找內存泄漏而設計的工具。 我有使用Electric Fence的個人經驗,它很容易使用,似乎很好地完成了工作(不確定它將如何處理C ++)。 其他人也推薦Dmalloc

可以肯定的是,每個人似乎都喜歡Valgrind ,它可以做任何事情,甚至可以做前端(雖然任何有前端構建的東西意味着它可能不是世界上最簡單的東西)。 如果KDE人員可以推薦它,它必須能夠處理任何事情。 (我不是說KDE有什么不好的,只是它是一個非常大的C ++代碼庫,所以如果Valgrind可以處理KDE軟件,它必須要有它的東西。雖然我沒有像電圍欄這樣的個人經驗對我來說總是足夠的)

我必須同意那些建議Valgrind和類似的東西,但是如果運行時開銷太大,一個選項可能是使用mallinfo()調用來檢索當前分配的內存的統計信息,並檢查uordblks是否為非零。

請注意,這必須在調用全局析構函數之前運行 - 因此,如果您有任何已清除的分配,則會記錄誤報。 它也不會告訴你哪里的分配是由-但它是一個很好的首選找出哪些測試用例需要工作。

不要看操作系統獲取分配信息。 C庫在內部管理內存,只要求操作系統提供更多內存RAM(在您的情況下為4KB)。 在大多數情況下,它永遠不會被釋放回操作系統,所以你無法真正檢查那里的任何東西。

您必須修補malloc()free()以獲取所需的信息。

或者,使用Valgrind。

不是直接的答案,但你可以重新定義:: new和:: delete運算符,並在內部通過單例或全局對象,跟蹤分配和解除分配的內存。

編輯:如果這是個人的DIY項目,那么很酷。 但是,如果它對於某些關鍵的東西你可以隨時跳到許多可用的泄漏檢測庫/程序之一,快速的谷歌搜索就足夠了。

google-perftools可用於您的測試代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM