Максимальный размер резидентного набора не имеет смысла

Я пытаюсь измерить потребление памяти запущенной программы в Linux. Я написал программу на C для выделения 1G памяти, а затем использовал time для вывода ее «Максимального размера резидентного набора»:

/usr/bin/time -f '%Uu %Ss %er %MkB %x %C' ./ takeMem 1000000000

0.85u 0.81s 1.68r 3910016kB0 ./takeMem 1000000000

Исходя из «рабочего времени», я должен интерпретировать, что «Максимальный размер резидентного набора» для такой программы занимает 3,9 ГБ памяти, хотя программа выделила только 1G памяти. Это не имеет смысла.

Кто-нибудь знает, что стало причиной того, что «Максимальный размер резидентного набора» стал таким высоким?

Код 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;
}
34
задан zhanxw 5 April 2012 в 20:05
поделиться