我在C++中创建了一个trie,并向它插入了1,000,000个字。有没有办法在创建/分配trie之前和之后获得空闲内存,以估计此数据结构占用的内存量?查询空闲内存量
基本上我喜欢搜索
Runtime.getRuntime().totalMemory()
是Java有什么。
我使用Ubuntu 64位和gcc,所以即使是一个没有可移植性的基于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++ app +运行bash命令并从C++中读取结果。听起来很复杂。有更短的路吗? +1为你的努力 – Alexandros
@Alexandros:你不需要运行bash命令。只需打开文件并直接从程序中读取它即可。 –
的可能重复[如何获得可用内存C++/G ++?](http://stackoverflow.com/questions/2513505/how-to-get-available-memory-cg ) – Etherealone
这不是重复的。因为你提到的问题总是返回相同的数字。我需要free_pages x page_size而不是total_pages x page_size – Alexandros