我在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