在 CentOS 下排查 C++ 内存泄漏,常用且实用的手段如下,按“从易到难、从快到准”的顺序说明:
sudo yum install valgrind
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./your_program
definitely lost:确定泄漏(重点看)indirectly lost:间接泄漏possibly lost:可能泄漏still reachable:程序退出时仍可访问(通常不是重点)✅ 优点:无需改代码,定位到行
❌ 缺点:程序运行很慢(适合调试环境)
top
free -m
观察:
适合确认是否有泄漏,不适合定位代码。
g++ -fsanitize=address -g -O1 main.cpp -o main
./main
泄漏时会直接打印调用栈。
✅ 优点:
适合不想引入工具时:
#include <iostream>
#include <map>
void* operator new(size_t size) {
void* p = malloc(size);
std::cout << "Alloc: " << p << " size: " << size << std::endl;
return p;
}
void operator delete(void* p) {
std::cout << "Free: " << p << std::endl;
free(p);
}
适合:
sudo yum install gperftools
编译:
g++ main.cpp -ltcmalloc
运行:
HEAPPROFILE=./heap ./main
pprof --text ./main heap.0001.heap
适合:
new 没 delete如果你愿意,可以:
我可以给你更具体的排查方案。