以下是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。