malloc和free的包装器提供分配统计信息?

时间:2013-11-14 18:57:35

标签: c malloc

是否有一个我可以使用的库(没有自己的编码),它为我提供了有关我已经malloc'ed和free'ed多少次的统计数据,以及分配的字节数?

1 个答案:

答案 0 :(得分:2)

如果您想检测内存泄漏等,Valgrind(另请参阅Wikipedia)也是一种选择。

我知道,这是一种非常非常基本的方法,但#defines可能是出于您的目的吗?

EG。把这样的东西放到标题中:

#ifdef COUNT_MALLOCS
static int mallocCounter;
static int mallocBytes;

// Attention! Not safe to single if-blocks without braces!
# define malloc(x)        malloc(x); mallocCounter++; mallocBytes += x
# define free(x)          free(x); mallocCounter++
# define printStat()      printf("Malloc count: %d\nBytes: %d\n", mallocCounter, mallocBytes)
#else
# define malloc(x)
# define free(x)
# define printStat()
#endif /* COUNT_MALLOCS */

既不灵活也不安全,但它应该适用于简单计数。

修改

也许最好将malloc()定义为自定义函数,因此单行if-blocks是安全的。

static int mallocCounter;
static int mallocBytes;

// ...

static inline void* counting_malloc(size_t size)
{
    mallocCounter++;
    mallocBytes += size;
    return malloc(size);
}

static inline void couting_free(void* ptr)
{
    mallocCounter--;
    free(ptr);
}

#define malloc(x)      counting_malloc(x)
#define free(x)        counting_free(x)