查询可用内存量

时间:2014-03-12 20:33:35

标签: c++ gcc

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

基本上我正在搜索类似

的内容
Runtime.getRuntime().totalMemory()  

Java有。

我使用的是Ubuntu 64bit和gcc,所以即使是基于gcc的解决方案,也没有可移植性,对我来说已经足够了。

1 个答案:

答案 0 :(得分:3)

在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;
}