我用 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/