C ++检测内存分配

时间:2016-07-17 07:49:16

标签: c++ gdb gprof

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

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

2 个答案:

答案 0 :(得分:1)

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

您还可以实现自己的malloc功能并与之链接。返回地址将在堆栈上,这将为您提供调用者。

答案 1 :(得分:1)

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

valgrind --tool=massif ./mybinary

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

P.S。还要检查TCMalloc库 - 它已经可能已经做了你想要的,尽管你可以做得更好,具体取决于你的具体应用。最好的是不需要更改源代码 - 只需使用链接器指令从glibc替换malloc函数。