我写了一个非常简单的Pin
工具来计算程序中动态分配的字节数。我使用这个工具对GIMP
进行了检测,并报告了77 MB
的分配情况。我和Valgrind
做了同样的实验,报告了117 MB
。
我的Pin
工具类似于Pin
中的示例。它在每个加载的图像中搜索malloc()
,calloc()
和memalign()
,并在它们之前添加指令以计算分配的总大小。我该如何解决这个问题?
它搜索malloc(),calloc()和memalign()
还有其他堆分配函数,您可能无法拦截和解释:realloc
和posix_memalign
。
您还需要跟踪所有已分配的指针并拦截free
,否则您的计数可能会过高。
您需要查找以下所有宏:
#define MMAP "mmap"
#define REALLOC "realloc"
#define CALLOC "calloc"
#define MALLOC "malloc"
#define SBRK "sbrk"
#define FREE "free"
捕获上述分配并检查分配大小。