我正在尝试测量Linux中正在运行的程序的内存消耗.我写了一个C程序来分配1G内存,然后用时间输出它的"最大驻留集大小":
/ usr/bin/time -f'%Uu%Ss%er%MkB%x%C'./takeMem 1000000000
0.85u 0.81s 1.68r 3910016kB 0./takeMem 1000000000
从'man time',我应该解释这个程序的"最大驻留集大小"需要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;
}
Run Code Online (Sandbox Code Playgroud)
bug*_*313 41
我不久前偶然发现了这一点.这是GNU时间中的一个错误,值是4倍太大,因为它假设页面大小并将其转换为kB,即使它已经是第一位的.你可能想检查一下:
http://groups.google.com/group/gnu.utils.help/browse_thread/thread/bb530eb072f86e18/83599c4828de175b
http://forums.whirlpool.net.au/archive/1693957
| 归档时间: |
|
| 查看次数: |
9589 次 |
| 最近记录: |