c++ - 查询可用内存量

标签 c++ gcc

我用 C++ 创建了一个 trie,并向其中插入了 1,000,000 个单词。有没有办法在创建/分配 trie 之前和之后获取空闲内存,以估计该数据结构占用多少内存?

基本上我在搜索类似的东西

Runtime.getRuntime().totalMemory()  

Java 有。

我使用的是 Ubuntu 64 位和 gcc,因此即使是基于 gcc 的解决方案(没有可移植性)对我来说也足够好。

最佳答案

在 Linux 上,查看/proc/getpid()/statm,例如

$ cat /proc/$$/statm
4128 728 443 176 0 291 0

您需要第六个数字(在本例中为 291)- 这是数据部分的大小。

(为避免疑义,您可以在您的程序中以编程方式阅读它。)

更新:shell命令是为了说明statm文件的内容。你不会在你的程序中这样做:只需阅读/proc/self/statm 并获取第六个字段:类似于 (C,而不是 C++,但如果你愿意,你可以使用 iostream,有点难看,但说明原理):

size_t read_statm (void)
{
  unsigned a, b, c, d, e, f;

  FILE * const fp = fopen ("/proc/self/statm", "r");

  if (NULL == fp)
  {
    perror ("fopen");
    return (size_t)0;
  }

  if (6 != fscanf (fp, "%u%u%u%u%u%u", &a, &b, &c, &d, &e, &f))
  {
    perror ("scanf");
    (void)fclose (fp);
    return (size_t)0;
  }

  (void)fclose (fp);
  return (size_t)f;
}

关于c++ - 查询可用内存量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22363167/

相关文章:

c - 为什么我可以在不包含 ctype.h 的情况下进行链接

c++ - g++如何在忽略函数返回值时获得警告

c - 零初始化全局数据的位置

c++ - C++ 包装 C 代码的重复 const 错误

c++ - Z3:创建具有动态已知项数的枚举类型

c++ - 如何使用 boost::bind 将返回 int 的函数转换为返回 bool 的函数?

c++ - 使用 std::begin 和 std::end 进行 vector 初始化

python - numpy C API 中的 import_array 如何工作?

c - 如何使用 GCC 在 Mac 终端上调试 C 程序?

c - 如何验证函数 X() 是从函数 Y() 而不是从函数 Z() 调用的?