Sto provando a misurare il consumo di memoria di un programma in esecuzione in Linux. Ho scritto un programma C per allocare la memoria 1G, quindi utilizzare il tempo per emettere la "Dimensione massima residente massima":La dimensione massima del set residente non ha senso
/usr/bin/time -f '% Uu% Ss% er% MkB% x% C'./takeMem 1000000000
0.85u 0.81s 1.68r 3910016kB 0 ./takeMem 1000000000
Da 'tempo uomo', avrei dovuto interpretare quel "resident set size massima" per tale programma prendono memoria 3.9G anche se il il programma ha assegnato solo 1G di memoria. Non ha senso.
Qualcuno può sapere che cosa è successo causa "Dimensione massima residente massima" così alta?
Il codice C è abbastanza semplice:
#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;
}
Per i sistemi RedHat/CentOS/Fedora questo è stato patchato nel pacchetto 'tempo-1.7-38': https://bugzilla.redhat.com/show_bug .cgi? id = 702.826 – daharon