2012-04-05 3 views
30

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

, 나는 비록 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입니다. 이 패키지에 패치 된 레드햇/CentOS는/페도라 시스템의

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

관련 문제