2012-04-05 8 views
30

Я пытаюсь измерить потребление памяти запущенной программы в 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; 
} 

ответ

38

я наткнулся на это некоторое время назад. Это ошибка во времени GNU, значения в 4 раза слишком велики, так как он предполагает размер на страницах и преобразует его в kB, даже если это kB уже в первую очередь. Вы могли бы хотеть проверить:

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

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

+1

Для систем RedHat/CentOS/Fedora это была исправлена ​​в пакете 'времени 1.7-38': https://bugzilla.redhat.com/show_bug .cgi? ID = 702826 – daharon

Смежные вопросы