【发布时间】:2014-07-28 13:32:37
【问题描述】:
如何获取程序中 malloc() 的总字节数(假设我使用 glibc 运行)? 我不想看到程序占用了多少内存,我想看看我分配了多少内存。下面是一个示例程序,其中这些数字会非常不同。
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main() {
vector<void *> p;
printf("Allocating...\n");
for (size_t i = 0; i < 1024 * 1024 * 10; ++i) {
p.push_back(malloc(1024));
memset(*p.rbegin(), 0, 1024);
}
printf("Press return to continue...\n");
getchar();
printf("Freeing all but last...\n");
for (size_t i = 0; i < p.size() - 1; ++i)
free(p[i]);
printf("Press return to continue...\n");
getchar();
// UNTIL THIS FREE, TOP WOULD SHOW THIS PROGRAM TAKES 16G,
// BUT THE TOTAL MALLOC() SIZE IS MUCH LESS.
printf("Freeing last...\n");
free(*p.rbegin());
printf("Press return to continue...\n");
getchar();
}
我知道这可以通过 LD_PRELOAD 或通过我自己的 malloc 和 free 函数来实现,但是有没有更简单的方法来获得 malloc() 的总数?
【问题讨论】:
-
您必须自己计算。也许使用一个宏来调用您自己的扩展
malloc函数:#define MALLOC my_malloc。 -
不错,呃,“C++”在这里。
-
tcmalloc,来自 Google,拥有大量可访问的统计信息,因此一旦您拥有LD_PRELOADed 它,您就可以使用它的特定功能来查询它的状态。 -
(即使你对 libc 感兴趣,你的代码也是 C++(尤其是使用
vector模板))
标签: c++ memory memory-management malloc heap-memory