Что означает максимальный размер резидентного набора? - PullRequest
3 голосов
/ 20 марта 2020
#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;
}

Приведенный выше код использует атрибут ru_maxrss структуры rusage . Это дает значение максимального резидентного размера набора. Что это значит? Каждый раз, когда программа выполняется, она дает другое значение. Поэтому, пожалуйста, объясните вывод этого кода?

enter image description here

enter image description here

Это скриншоты двух выполнения одного и того же кода, которые дают разные выходы, как объяснить эти числа или что можно интерпретировать из этих двух выходов?

1 Ответ

1 голос
/ 20 марта 2020

Размер резидентного набора (RSS) означает, примерно, общий объем физической памяти, выделенной процессу в данный момент времени. Он не учитывает страницы, которые были выгружены или отображены из файла, но в данный момент не загружены в физическую память.

«Максимальный RSS» означает максимум RSS с момента рождения процесса, т.е. самый большой это когда-либо было. Таким образом, это число говорит вам о наибольшем объеме физической памяти, который когда-либо использовался вашим процессом в любой момент.

Он может варьироваться от одного запуска к следующему, если, например, ОС решила поменять различные объемы памяти вашей программы в разное время. Это решение будет зависеть отчасти от того, что делает остальная часть системы, и где еще требуется физическая память.

...