我试图跟踪我的应用程序占用了多少内存。所以我在读/proc/self/statm。
#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而改变吗?
发布于 2013-05-08 01:24:44
实际上,/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,根据proc man的说法,它是shows memory consumption for each of the process's mappings.。这意味着它将为每个实例提供内存消耗。
https://stackoverflow.com/questions/16424472
复制相似问题