2012-04-05 26 views
30

Tôi đang cố gắng đo mức tiêu thụ bộ nhớ của một chương trình đang chạy trong Linux. Tôi đã viết một chương trình C để phân bổ bộ nhớ 1G, sau đó sử dụng thời gian để xuất ra "Kích thước thiết lập người cư trú tối đa":Kích thước bộ thường trú tối đa không có ý nghĩa

/usr/bin/time -f '%%%%%%'% './takeMem 1000000000

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

Từ 'thời gian người đàn ông, tôi nên giải thích rằng "kích thước tập hợp lưu trú tối đa" cho chương trình như mất trí nhớ 3.9G mặc dù chương trình chỉ phân bổ bộ nhớ 1G. Nó chả có nghĩa gì cả.

Ai có thể biết điều gì đã xảy ra gây ra "Kích thước tập hợp người ở tối đa" cao không?

Mã C là khá đơn giản:

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

Trả lời

38

tôi stumbled trên này một thời gian trước đây. Đó là một lỗi trong thời gian GNU, giá trị là 4 lần quá lớn, vì nó giả định một kích thước trong các trang và chuyển đổi nó thành kB, mặc dù nó là kB đã ở nơi đầu tiên. Bạn có thể muốn kiểm tra:

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

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

+1

Đối với hệ thống RedHat/CentOS/Fedora này đã được vá trong gói 'thời gian 1.7-38': https://bugzilla.redhat.com/show_bug .cgi? id = 702826 – daharon

Các vấn đề liên quan