Windows - размер фиксации и виртуальный размер

Мне бы хотелось узнать точную разницу между Commit Size (видимой в диспетчере задач) и Виртуальный размер (видимый в Process Explorer) SysInternals.

Параметр Virtual Size в Process Explorer выглядит как более точный индикатор использования общей виртуальной памяти процессом. Однако Commit Size всегда меньше виртуального размера, и я полагаю, что он не включает всю виртуальную память, используемую процессом. Я хотел бы, чтобы кто-то объяснил, что именно включено в эти параметры.

Ответ 1

Память может быть зарезервирована, зафиксирована, сначала доступна и станет частью рабочего набора. Когда память зарезервирована, часть адресного пространства отложена, ничего больше не происходит.

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

Когда доступ к памяти осуществляется впервые, страницы, которые формально существуют, создаются так, что они действительно существуют. Либо нулевая страница предоставляется процессу, либо данные считываются на страницу из сопоставления. Страница перемещается в рабочий набор процесса (но не обязательно останется там навсегда).

Каждый запущенный процесс имеет несколько страниц, которые фактически и логически находятся в ОЗУ, то есть эти страницы существуют, и они существуют и "официально". Это рабочий процесс процесса.
Кроме того, в каждом запущенном процессе есть страницы, которые фактически находятся в ОЗУ, но официально не существуют в ОЗУ. Они могут быть на том, что называется "резервным списком" или частью буферного кеша, или чем-то другим. Когда они будут доступны, ОС может просто переместить их в рабочий набор снова.
Наконец, каждый процесс имеет страницы, которые вообще не находятся в ОЗУ (либо в swap, либо они еще не существуют).

Виртуальный размер содержит размер всех страниц, зарезервированных для процесса.

Размер фиксации содержит только страницы, которые были зафиксированы.

То есть, в условиях неспециалиста "виртуальный размер" в значительной степени является вашей собственной проблемой и ограничен только размером вашего адресного пространства, тогда как "фиксировать размер" - это проблема всех, поскольку он потребляет глобальный ограниченный ресурс (RAM plus замена). Поэтому он влияет на другие процессы.

Ответ 2

Размер фиксации - это объем пространства, зарезервированного в файле подкачки для процесса. Используется, когда его страницы должны быть заменены, чтобы освободить место в ОЗУ для других процессов.

И да, размер виртуальной памяти будет больше, поскольку он включает страницы, которые не подкреплены файлом подкачки. По крайней мере, разделы кода и ресурсов в EXE и непересекающихся DLL. При необходимости эти страницы можно просто отбросить и перезагрузить из файла. Все эти DLL файлы операционной системы соответствуют этой категории. Кроме того, любые файлы с отображением памяти, используемые процессом. Утилита VMMap SysInternals может дать представление.

Ответ 3

Виртуальный размер - это размер виртуального адресного пространства процесса.

При распределении памяти вы можете запросить диапазон адресов, не запивая за собой память. Этот адрес не указывает на физическую память до тех пор, пока для их фиксации не будет использован второй вызов выделения.

Подробнее о VirtualAlloc. Linux имеет функцию mmap, которая делает то же самое.