2014-03-12 105 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命令。只需打開文件並直接從程序中讀取它即可。 –