2012-04-05 18 views
30

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; 
} 

risposta

38

ci siamo imbattuti in questo qualche tempo fa. È un bug nel tempo di GNU, i valori sono 4 volte troppo grandi, in quanto assume una dimensione nelle pagine e la converte in kB, anche se è già kB in primo luogo. Si potrebbe desiderare di controllo:

http://groups.google.com/group/gnu.utils.help/browse_thread/thread/bb530eb072f86e18/83599c4828de175b

http://forums.whirlpool.net.au/archive/1693957

+1

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

Problemi correlati