在 C 程式中,我有時會遇到“弱”記憶體泄漏的問題。我的意思是說,某些物件會積累資源,但最終這些物件會被正確銷毀并釋放其記憶體,因此使用 valgrind 或地址清理器等傳統記憶體除錯工具不會出現這些泄漏。
一個典型的例子是寫得不好的快取,它保留了程式開始時的所有快取結果。它永遠增長,但它的記憶體在程式結束時被回收,當快取被破壞時。
如何除錯呢?是否有工具可以查看程式分配的最大物件在哪里?轉儲分配的記憶體(包括呼叫堆疊)的當前狀態?查看哪些物件在增長?我正在使用 Linux,但我也對其他平臺感興趣。
uj5u.com熱心網友回復:
如果可以選擇其他平臺,我會推薦 Windows 上的 Visual Studio。
它具有強大的分析選項,包括一個用于記憶體使用的選項。
https://docs.microsoft.com/en-us/visualstudio/profiling/memory-usage
在除錯時,您可以拍攝快照以查看正在使用記憶體的位置。
您還可以在不同時間拍攝記憶體使用情況快照并進行比較。
uj5u.com熱心網友回復:
您可以使用諸如 Intel VTune(也可用于 Linux)之類的分析器來跟蹤應用程式的記憶體消耗。在 VTune 中,您可以查看記憶體消耗隨時間的變化,并選擇一個時間視窗以查看在該視窗期間記憶體分配的位置。
如果您的應用程式正確分配和釋放大量記憶體,并且只有一小部分被釋放得太晚,那么仍然很難檢測到此類問題。在這種情況下,您需要檢查大量分配/解除分配,然后才能找到壞的分配/解除分配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331756.html
下一篇:通過增加頻率對陣列進行排序
