跟踪内存分配

时间:2012-05-09 11:26:38

标签: c memory-management

是否有任何方法可以跟踪C程序的每个步骤分配,重新分配和释放的内存量?我的意思是一个程序中的所有分配,而不是错误,内存泄漏或这种方式。

3 个答案:

答案 0 :(得分:1)

一种常见的方法是用宏来覆盖malloc / free:

#define malloc(size) custom_malloc(size, __FILE__, __LINE__)

然后,您可以让custom_malloc执行正常的malloc,并将分配信息转储到文件(或者您想用它做什么)。

要跟踪在空闲时释放多少内存,一个选项是在每个malloc调用上分配一个额外的字段来存储分配的大小,然后您可以在空闲时检查。 或者您可以将malloc / free指针转储到文件,然后编写脚本进行后期处理并对其进行排队。这在某种程度上取决于您想要对信息做些什么。

答案 1 :(得分:1)

在MFC环境中的窗口上,DEBUG_NEW是单向的。

http://msdn.microsoft.com/en-us/library/aa297313%28v=vs.60%29.aspx

另一个是使用标准文件和亚麻布重新定义alloc函数系列。

   #define malloc(size) custom_malloc(size, __FILE__, __LINE__)

详细的例子是 http://www.almostinfinite.com/memtrack.html

答案 2 :(得分:1)

是的,有办法做到这一点。我只知道一种方式。它被称为Pin。理想情况下,您可以将pin tool附加到二进制文件,然后它就可以访问所有内存访问和内容。它不需要对源代码进行任何修改。

这需要您编写一个Pin工具。 pin工具本质上是一个代码,您可以在其中指定要在程序运行中监视的参数以及方式。它非常灵活。但要注意,它有一点学习曲线。所以,只有当你有时间学习它时,这才是理想的选择。但是,如果你立即得到结果,那可能不足以达到你的目的。

另请注意,Pin默认情况下提供了一些您可能感兴趣的工具,或者您可以根据自己的需要进行修改的工具。您可能想要使用的一些工具(最重要的是):  1. Pinatrace  1. MallocTrace

我可能拼错了一些东西。但有很多东西可能会给你你想要的东西!

另一个可行的解决方案是@happydave提到的解决方案,我不推荐的解决方案是重新定义mallocfree函数,这样当你调用malloc / free时,它会记录您感兴趣的参数。我建议Pin重新定义malloc的唯一原因是当您有时间并且将来您希望为跟踪器添加更多功能时。