statm не сообщает об обновлении VmSize

Я пытался отследить, сколько памяти занимает мое приложение. Итак, я читал /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 ?

0

Решение

/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. в соответствии с процедурой человек. Это означает, что он даст вам потребление памяти за пример.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]