Windows - фиксированный размер против виртуального размера
Я хотел бы знать точную разницу между фиксацией размера (отображается в диспетчере задач) и виртуальным размером (отображается в проводнике процессов SysInternals).
Параметр Virtual Size в Process Explorer выглядит как более точный индикатор общего использования виртуальной памяти процессом. Однако размер коммитов всегда меньше, чем виртуальный размер, и я предполагаю, что он не включает всю виртуальную память, используемую процессом. Я хотел бы, чтобы кто-нибудь объяснил, что именно входит в эти параметры.
3 ответа
Память может быть зарезервирована, зафиксирована, доступна в первый раз и быть частью рабочего набора. Когда память зарезервирована, часть адресного пространства откладывается, больше ничего не происходит.
Когда память выделяется, операционная система гарантирует, что соответствующие страницы в принципе могут существовать либо в физической памяти, либо в файле подкачки. Другими словами, он учитывает жесткое ограничение общего количества доступных страниц в системе и формально создает страницы. То есть он создает страницы и делает вид, что они существуют (хотя в действительности их еще нет).
Когда к памяти обращаются в первый раз, формально существующие страницы создаются таким образом, что они действительно существуют. Либо нулевая страница передается процессу, либо данные считываются на страницу из сопоставления. Страница перемещается в рабочий набор процесса (но не обязательно останется там навсегда).
Каждый запущенный процесс имеет несколько страниц, которые фактически и логически находятся в ОЗУ, то есть эти страницы существуют, и они также существуют "официально". Это рабочий набор процесса.
Кроме того, каждый запущенный процесс имеет страницы, которые фактически находятся в ОЗУ, но официально больше не существуют в ОЗУ. Они могут быть в том, что называется "резервным списком" или частью буферного кэша, или чем-то другим. Когда к ним обращаются, ОС может просто переместить их в рабочий набор снова.
Наконец, у каждого процесса есть страницы, которые вообще не находятся в оперативной памяти (либо при обмене, либо они еще не существуют).
Виртуальный размер включает в себя размер всех страниц, зарезервированных процессом.
Размер фиксации содержит только те страницы, которые были зафиксированы.
То есть, с точки зрения непрофессионала, "виртуальный размер" - это в значительной степени ваша собственная проблема, и он ограничен только размером вашего адресного пространства, в то время как "размер фиксации" - это проблема каждого, так как он использует глобальный ограниченный ресурс (RAM плюс подкачка). Поэтому он влияет на другие процессы.
Размер фиксации - это объем пространства, зарезервированный в файле подкачки для процесса. Используется, когда его страницы должны быть выгружены, чтобы освободить место в оперативной памяти для других процессов.
И да, размер виртуальной памяти будет больше, поскольку он включает в себя страницы, которые не поддерживаются файлом подкачки. По крайней мере, разделы кода и ресурсов в EXE и не перемещенных DLL. При необходимости эти страницы могут быть просто удалены и загружены из файла. Все библиотеки операционной системы соответствуют этой категории. Кроме того, любые отображенные в память файлы используются процессом. Служебная программа SysInternals VMMap может дать понимание.
Виртуальный размер - это размер виртуального адресного пространства процесса.
При выделении памяти вы можете запросить диапазон адресов без фактического выделения памяти за ним. Эти адреса не указывают на физическую память, пока второй вызов распределения не используется для их фиксации.
Узнайте больше на VirtualAlloc. В Linux есть функция mmap, которая делает то же самое.