gpt4 book ai didi

c++ - glibc malloc() 总字节数

转载 作者:太空狗 更新时间:2023-10-29 23:39:59 26 4
gpt4 key购买 nike

如何获取程序中 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 或我自己的 mallocfree 函数来实现,但是有没有更简单的方法来获取 malloc() 总计?

最佳答案

各种语言标准说:

没有独立于平台的方法来获取此信息。 malloc 的不同实现可能会提供此信息,但它会以非标准方式提供。

Glibc 提供:

  • 您可以使用 __malloc_hook编写一个钩子(Hook)来计算已分配的内存量的功能。

  • 还有 mallinfo() ,它应该提供一些有关已分配内存的信息。

关于c++ - glibc malloc() 总字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com