2012-04-05 12 views
30

Linuxで実行中のプログラムのメモリ消費量を測定しようとしています。私は1Gのメモリを割り当てるCプログラムを書いた後、時間を使って "Maximum residident set size"を出力します:常駐セットの最大サイズが意味を持たない

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

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

'男の時間' から、私はこのようなプログラムのための "最大常駐セットのサイズは" ものの3.9Gメモリを取ると解釈すべきですプログラムは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; 
} 

答えて

38

私はしばらく前にこれに出くわし。これはGNU時間のバグです。値は4倍大きくなります。ページ内のサイズを想定し、すでにkBになっているにもかかわらず、それをkBに変換するためです。これはパッケージにパッチを当てたRedHatの/ CentOSの/ Fedoraのシステムでは

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

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

+1

'時間1.7-38':https://bugzilla.redhat.com/show_bug あなたがチェックしたいかもしれません.cgi?id = 702826 – daharon

関連する問題