2014-03-12 58 views
0

我在C++中创建了一个trie,并向它插入了1,000,000个字。有没有办法在创建/分配trie之前和之后获得空闲内存,以估计此数据结构占用的内存量?查询空闲内存量

基本上我喜欢搜索

Runtime.getRuntime().totalMemory() 

是Java有什么。

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

+0

的可能重复[如何获得可用内存C++/G ++?](http://stackoverflow.com/questions/2513505/how-to-get-available-memory-cg ) – Etherealone

+0

这不是重复的。因为你提到的问题总是返回相同的数字。我需要free_pages x page_size而不是total_pages x page_size – Alexandros

回答

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; 
} 
+0

我需要从C++ app +运行bash命令并从C++中读取结果。听起来很复杂。有更短的路吗? +1为你的努力 – Alexandros

+0

@Alexandros:你不需要运行bash命令。只需打开文件并直接从程序中读取它即可。 –