Я пытаюсь измерить потребление памяти запущенной программы в Linux. Я написал программу на C для выделения 1G памяти, а затем использовал time для вывода ее «Максимального размера резидентного набора»:
/usr/bin/time -f '%Uu %Ss %er %MkB %x %C' ./ takeMem 1000000000
0.85u 0.81s 1.68r 3910016kB0 ./takeMem 1000000000
Исходя из «рабочего времени», я должен интерпретировать, что «Максимальный размер резидентного набора» для такой программы занимает 3,9 ГБ памяти, хотя программа выделила только 1G памяти. Это не имеет смысла.
Кто-нибудь знает, что стало причиной того, что «Максимальный размер резидентного набора» стал таким высоким?
Код C довольно прост:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int memLength = atoi(argv[1]);
fprintf(stderr, "Allocating %d memory...", memLength);
unsigned char* p = new unsigned char[memLength];
fprintf(stderr, "Done\n");
while (true) {
int i = rand() % memLength;
char v = rand() % 256;
p[i] = v;
}
return 0;
}