C++检测内存分配

C++ detect memory allocation

我正在努力提高我的 C++ 程序的性能,我发现将内存分配 (mallocs) 转换为对象池会产生很好的效果。 问题在于检测调用 malloc 的位置,因为代码库非常大。我不能使用带有断点的简单 gdb,因为有许多并行的定时器和信号处理程序 运行。

gdb 中有没有一种方法可以在调用 malloc 时打印整个堆栈跟踪,而不必每次都手动执行。 要么 你能推荐任何其他工具来帮助我做同样的事情吗?

您可以使用 Python 编写 gdb 脚本。

您还可以实现自己的 malloc 函数,link 以此实现。 return 地址将在堆栈上,这将为您提供调用者。

valgrind 工具套件包含 massif,您可以将其用于此目的:

valgrind --tool=massif ./mybinary

这会收集所有分配的详细信息,包括您可以在程序完成执行后检查的堆栈跟踪。有关输出的更多详细信息,请参阅 massif 文档:http://valgrind.org/docs/manual/ms-manual.html。希望对您有所帮助。

P.S。还要检查 TCMalloc 库——它可能已经做了你想要的,尽管你可以根据你的特定应用程序做得更好。最好的事情是不需要更改源代码 - 您只需使用链接器指令替换 glibc 中的 malloc 函数。