Я пытался отследить, сколько памяти занимает мое приложение. Итак, я читал /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
?
/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.
в соответствии с процедурой человек. Это означает, что он даст вам потребление памяти за пример.
Других решений пока нет …