36

Linuxで実行中のプログラムのメモリ消費量を測定しようとしています。1Gメモリを割り当てるCプログラムを作成し、時間を使用して「最大常駐セットサイズ」を出力しました。

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

0.85u 0.81s 1.68r **3910016kB** 0 ./takeMem 1000000000

からman time、このようなプログラムの「最大常駐セットサイズ」は、1Gメモリしか割り当てられていませんが、3.9Gメモリを使用すると解釈する必要があります。それは意味がありません。

「最大居住者セットサイズ」がこれほど高くなった原因を誰かが知ることができますか?

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

1 に答える 1

44

少し前にこれに出くわしました。これは GNU 時間のバグです。ページ単位のサイズを想定して kB に変換するため、値が 4 倍大きすぎます。そもそも既に kB であるにもかかわらずです。あなたはチェックしたいかもしれません:

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

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

于 2012-04-12T22:34:48.683 に答える