回覆列表
  • 1 # 萌帆豆寵

    記憶體洩露的查詢有很多方式,可以藉助自動化工具(github或相關網路資源上找),往往出現記憶體洩露時可以有以下幾種方式來排查:

    review程式碼。如果程式碼量不是很大,並且有交叉review的習慣。可以在初期解決掉。

    使用記憶體洩露檢查工具,網上有很多工具,我列舉幾個可以嘗試的:

    vagrind 這個工具會幫你檢查出懷疑點,它分好幾個等級來懷疑記憶體洩露,注意確定那個等級。

    還有vagrind 跑程序需要新增符號表,這樣很容易顯示出具體程式碼哪個位置出現洩露。

    新增符號表導致動態庫太大,無法在板子中復現。可以透過內建的gdb外掛,或者僅僅新增基礎libc庫的符號表(libc.so 應該是這個?)。

    mtrace

    原理:對malloc 函式進行封裝和記錄改造,使每次呼叫記憶體相關的底層函式有依據可查詢,。

    使用時需要在每個使用過記憶體函式的地方增加該工具自帶的標頭檔案。這點會比較麻煩。

    當上面的幾種都分析不出來時,需要了解更底層的記憶體管理機制。

    例如:生成的每個執行緒都會有自己arean記憶體用於本身執行緒使用,所以在多執行緒的情況下會導致arean記憶體變多,且在達到一定數量後會繼續複用。導致最終記憶體大範圍的丟失掉。此時需要將arean 每次生成大小要減少。

    連結:https://www.jianshu.com/p/fa2d7df5966e

  • 中秋節和大豐收的關聯?
  • 一直想買漢蘭達,當今平臺好還是等豐田TNGA出來了的平臺好?為什麼?