Я пытаюсь измерить потребление памяти запущенной программы в Linux. Я написал программу на C, чтобы выделить 1G-память, а затем использовать время для вывода своего "Максимального размера резидентного набора":
/usr/bin/time -f '% Uu% Ss% er% MkB% x% C'./takeMem 1000000000
0.85u 0.81s 1.68r 3910016kB 0./takeMem 1000000000
Из "man time" мне следует интерпретировать, что "Максимальный размер резидентного набора" для такой программы занимает 3,9 Гб памяти, хотя программа выделяет только 1 Гб памяти. Это НЕ имеет смысла.
Может ли кто-нибудь узнать, что привело к тому, что "Максимальный размер резидентного набора" был высоким?
Код 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;
}