我正在尝试测量 Linux 中正在运行的程序的内存消耗。我写了一个C程序来分配1G内存,然后用时间输出它的“Maximum resident set size”:
/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;
}