版本迭代后,我的项目的内存使用量增加了(这是一个多线程项目(。我想知道代码中的哪一部分导致了增长。
我认为,如果我可以记录每个内存分配的调用树,那么我就可以根据堆栈进行集群,并进一步识别导致内存增加的代码。
这些工具应该识别调用方的dll或lib,并记录在项目的整个运行过程中分配了多少内存。
我一直在使用Tracy探查器来跟踪分配。不过,它要求您重载operator new
和operator delete
。它还有一个很好的视觉界面。
来自tracy文档:
void* operator new(std :: size_t count)
{
auto ptr = malloc(count);
TracyAlloc (ptr , count);
return ptr;
}
void operator delete(void* ptr) noexcept
{
TracyFree (ptr);
free(ptr);
}
对于Windows上C/C++代码中的内存泄漏检测,请查看UMDH工具,它是";用于Windows的调试工具";。你会发现很多关于如何使用它的博客文章。