Заголовок спрашивает: «Как бесплатно вычислять используемую память?»
Ответ: Он запрашивает ОС, которая должна отслеживать это, чтобы выполнить свою работу.
Более конкретно, он запрашивает подсистему управления памятью. Как отмечает sheepsimulator в комментариях, ядро Linux предоставляет все виды данных, поддерживаемых ОС, в виртуальной файловой системе /proc
, но каждая полнофункциональная ОС должна отслеживать данные такого рода, поэтому предоставление API для этого является небольшим вопросом. free
использовать.
Вопрос задается: «Почему это отличается от суммирования VmSize, сообщаемого для всех процессов?»
Ответ: По крайней мере, здесь что-то происходит
- Linux обещает память программе без ее фактического распределения. Когда вы делаете
char *p=new(1024
1024*sizeof(char));, ядро не дает вам сразу гигабайт. Если он просто скажет «ОК» и поймет, что он схватит его, когда вы начнете его использовать. Таким образом, необходимость печально известного
OOM убийца .
Динамические библиотеки являются общими, и одна страница реальной памяти может быть отображена в виртуальное адресное пространство более чем одного процесса.
*1024*
Кроме того, ваш проход через файловую систему proc не является атомарным.
В результате вывод free
более точно отражает использование физической памяти вашей машины в данный момент.