2012-04-05 20 views
30

Linux'ta çalışan bir programın bellek tüketimini ölçmeye çalışıyorum. 1G belleği ayırmak için bir C programı yazdım, ardından "Maksimum yerleşik set boyutu" çıktı için zaman kullanıyorum:Maksimum yerleşik set boyutu anlamlı değil

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

0.85u 'adam zaman' Gönderen 0.81s 1.68r 3910016kB 0 ./takeMem 1000000000

, ben her ne kadar 3.9 g bellek almak böyle bir program için "Maksimum ikamet seti boyutu" şeklinde değerlendirerek Program sadece 1G hafıza tahsis edildi. Mantıklı değil.

"Maksimum yerleşik set büyüklüğü" ne sebep olduğu bilinen herhangi biri olabilir mi?

C kodu

oldukça basittir:

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

cevap

38

Bir süre önce bu tökezledi. Bu, GNU zamanındaki bir hatadır, değerler 4 kat fazladır, çünkü sayfalarda bir boyut varsayar ve kB'ye girmiş olsa bile, kB'ye dönüştürür. Bu paketteki yamalı RedHat/Centos/Fedora sistemlerinde

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

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

+1

'zaman 1.7-38': https://bugzilla.redhat.com/show_bug Çeki isteyebilirsin cgi? id = 702826 – daharon

İlgili konular