Jim*_*ker 4 c++ gcc valgrind memory-management
我有一个长期运行的C++程序,通常用gcc(g ++)编译.我使用valgrind来验证没有内存泄漏,所以我不是在寻找泄漏检测器.
但是,我关注的是临时缓冲区/对象上的内存碎片和不必要的新/删除对.
有没有办法记录所有对new的调用(即使它们发生在STL容器内),提供堆栈跟踪以便我可以在代码中查找它们?我尝试过mtrace,但这只适用于C++ - 它最终说当我查找负责的代码行时,所有分配都发生在全局新的分配器中.不知怎的,valgrind的memcheck几乎可以做我想要的,因为它显示了内存分配的堆栈跟踪.不幸的是,它们似乎只为分配而不匹配解除分配.
如果要跟踪有关分配的其他统计信息,您始终可以覆盖全局新/删除功能:
void* operator new (size_t size)
{
void *pPtr = alloc_memory(size); /* perform the allocation here but don't use new! */
if(pPtr == 0)
throw std::bad_alloc();
/* additional code here to do whatever sort of tracking you want */
return pPtr;
}
void operator delete (void *pPtr)
{
if(pPtr == 0)
return; // legal to call delete on NULL pointers - don't pass NULL to free()
/* additional code to do whatever tracking you want here */
free(pPtr);
}
Run Code Online (Sandbox Code Playgroud)
至于获得回溯,那就是编译器和O/S依赖,并且没有标准的方法来实现它.由于您提到GCC,以下内容可能对您有用:
http://tombarta.wordpress.com/2008/08/01/c-stack-traces-with-gcc/
| 归档时间: |
|
| 查看次数: |
723 次 |
| 最近记录: |