以下是Linux C++中常用的內存泄漏檢測工具:
-
Valgrind
- 功能:檢測內存泄漏、非法內存訪問、重復釋放等問題,支持多種工具(如Memcheck、Massif等)。
- 特點:功能全面,可定位泄漏位置,但運行速度較慢(約慢10-50倍)。
- 使用:安裝后通過
valgrind --leak-check=full ./程序
運行。
-
AddressSanitizer (ASan)
- 功能:檢測內存泄漏、堆溢出、越界訪問等,集成于GCC/Clang編譯器。
- 特點:運行速度快,需在編譯時啟用(
-fsanitize=address
)。
-
LeakSanitizer (LSan)
- 功能:專注于內存泄漏檢測,通常與ASan結合使用。
- 特點:輕量級,精準定位泄漏點。
-
mtrace
- 功能:跟蹤內存分配/釋放,檢測未釋放內存。
- 特點:無需重新編譯,通過環境變量啟用,適合簡單場景。
-
dmalloc
- 功能:檢測內存泄漏,提供詳細內存使用報告。
- 特點:需鏈接庫,支持多線程,適合復雜程序。
-
Electric Fence
- 功能:檢測堆溢出,通過分頁機制快速定位越界訪問。
- 特點:輕量級,僅適用于堆內存檢測。
選擇建議:
- 需全面檢測內存問題(含泄漏、越界等):選Valgrind或ASan+LSan。
- 追求運行速度:選ASan/LSan。
- 簡單場景快速定位:選mtrace。