Я пытаюсь измерить потребление памяти запущенной программы в 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
С 'времени человек', я должен интерпретировать, что "Максимальный размер резидентного набора" для такой программы принимают 3.9G память хотя программа выделяет только 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;
}
Для систем RedHat/CentOS/Fedora это была исправлена в пакете 'времени 1.7-38': https://bugzilla.redhat.com/show_bug .cgi? ID = 702826 – daharon