2013-05-07 79 views
0

我試圖跟蹤我的應用程序正在採取多少內存。所以我在讀/proc/self/statmstatm不報告更新VmSize

#include <iostream> 
#include <fstream> 

void print_mem(){ 
    std::ifstream proc_stream("/proc/self/statm"); 
    long long VmSize = 0, VmRSS = 0, Share = 0; 
    proc_stream >> VmSize >> VmRSS >> Share; 
    proc_stream.close(); 
    std::cout << VmSize << " " << VmRSS << std::endl; 
} 

struct C{ 
    int a[256]; 
}; 

int main(){ 
    print_mem();// first call 
    C* c = new C; 
    print_mem();// second call 
    return 0; 
} 

我期待VmSize會有一些增長。但是我看到它總是報告相同的VmSize,VmRSS。不會因爲我分配c而改變?

+0

它是報告。我只是試圖malloc()500,000字節(〜0.5 MB)和VmSize從874跳轉到998. – 2013-05-07 17:19:41

+0

我設置''[4096]'而不是'256'但我沒有看到任何改變。但是,如果我將其更改爲'a [1024 * 1024]',我看到從'756'改爲'1782'。 – 2013-05-07 17:23:48

回答

1

/proc/self/statm事實上是報告您的進程使用的虛擬內存大小。

編輯:

I set a[4096] instead of 256 But I don't see any change. However If I change it to a[1024*1024] I see a change from 756 to 1782

我覺得它有什麼虛擬內存是做:https://serverfault.com/a/138435可能會有所幫助。我不認爲分配一個數組甚至是一個malloc()都會給你實際的內存分配給程序的實例。我也會看看這裏的答案:https://stackoverflow.com/a/1237930/1767191這暗示你使用/proc/self/smaps其中shows memory consumption for each of the process's mappings.根據proc人。這意味着它會給你每個實例的內存消耗。

+0

那我在哪裏可以得到它的字節? – 2013-05-07 17:27:32