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

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

Из "man time" мне следует интерпретировать, что "Максимальный размер резидентного набора" для такой программы занимает 3,9 Гб памяти, хотя программа выделяет только 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;
}

Ответ 1

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

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

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