#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int i = 0;
struct rusage r_usage;
while (++i <= 10) {
void *m = malloc(20*1024*1024);
memset(m,0,20*1024*1024);
getrusage(RUSAGE_SELF,&r_usage);
printf("Memory usage = %ld\n",r_usage.ru_maxrss);
sleep (3);
}
printf("\nAllocated memory, sleeping ten seconds after which we will check again...\n\n");
sleep (10);
getrusage(RUSAGE_SELF,&r_usage);
printf("Memory usage = %ld\n",r_usage.ru_maxrss);
return 0;
}
上面的代码使用 rusage 结构的 ru_maxrss 属性。它给出了最大常驻集大小的值。这是什么意思?每次执行程序时,它都会给出不同的值。所以请解释这段代码的输出?
这些是同一代码的两次执行的屏幕截图,给出了不同的输出,如何解释这些数字或从这两个输出中可以解释什么?
答案 0 :(得分:3)
Resident set size (RSS)大致是指在给定时间点分配给进程的物理内存总量。它不计算已换出的页面或从文件映射但当前未加载到物理内存中的页面。
“最大RSS”是指自该过程诞生以来RSS的最大值,即它曾经是最大的RSS。因此,这个数字告诉您您的进程在任何时刻都使用过的最大物理内存。
例如,如果操作系统决定在不同时间换出不同数量的程序内存,则每次运行可能会有所不同。该决定将部分取决于系统其余部分正在做什么以及需要物理内存的其他地方。