Виртуальное адресное пространство в 64-разрядных системах, работающих в режиме совместимости
-
20-08-2019 - |
Вопрос
Я видел, что в 64-разрядной ОС Windows доступное пользовательское виртуальное адресное пространство составляет 8 terra байт.Но если программа , которую мы выполняем на этом, работает в 32 - разрядном режиме совместимости , остается ли такая большая часть пользовательского пространства доступной ?или он ведет себя как обычная 32-разрядная ОС и предоставляет пользователю только 2 ГБ адресного пространства?
Решение
У Microsoft есть диаграмма, показывающая различные ограничения: Ограничения памяти для версий Windows
Подводя итог только виртуальному адресному пространству пользовательского режима:
- 32-разрядная версия Windows:
- 32-разрядный процесс:2 ГБ по умолчанию;3 ГБ с
/LARGEADDRESSAWARE:YES
и 4GT
- 32-разрядный процесс:2 ГБ по умолчанию;3 ГБ с
- 64-разрядная версия Windows (архитектура x64):
- 32-разрядный процесс:2 ГБ по умолчанию;4 ГБ с
/LARGEADDRESSAWARE:YES
- 64-разрядный процесс:8 ТБ по умолчанию;2 ГБ с
/LARGEADDRESSAWARE:NO
- 32-разрядный процесс:2 ГБ по умолчанию;4 ГБ с
4GT - это настройка на 4 гигабайта:
- ХР:
/3GB
переключатель boot.ini - Перспектива:
bcdedit /set increaseuserva 3072
Марк Руссинович сделал запись в блоге, объясняющую многие из этих ограничений: Раздвигая границы возможностей Windows:Виртуальная память
Другие советы
Ваш процесс будет видеть виртуальное адресное пространство объемом 4 ГБ только тогда, когда он запущен как 32-разрядный процесс.Он не сможет обратиться ни к чему более высокому.
Мой первоначальный ответ был довольно плохим.Вот ссылка, которая довольно хорошо объясняет, о чем говорил Джаредпар.
Что касается аппаратного обеспечения, то, когда вы работаете в режиме совместимости (т.е.IA32_EFER.Установлен LMA, и бит L не указан в дескрипторе сегмента CS) сегменты ведут себя как 32-разрядные сегменты.Это:
- база сегментов ограничена 32 битами.
- ограничение сегмента также ограничено 32 битами (с использованием бита G).
Это эффективно ограничивает вас 4 ГБ виртуальных адресов.Я не знаком с тем, как ОС разбивает виртуальную память на разделы в различных режимах, но это это аппаратный предел.(извините...Я специалист по оборудованию, а не эксперт по ОС)
Если ваша программа выполняется как 32-разрядный процесс в подсистеме Wow64, она будет видеть точно такое же адресное пространство, которое она видела бы в реальной 32-разрядной ОС.Без каких-либо специальных опций 32-разрядный процесс будет иметь 2 ГБ доступной памяти.
Единственное отличие заключается в доступной памяти, если вы используете Большое адресное программное обеспечение вариант.В обычном 32-разрядном процессе это позволяет использовать 3 ГБ адресуемой памяти.В процессе Wow64 он может видеть до 4 ГБ (Источник)
Следует отметить, что при запуске 32-разрядного процесса в IIS 6.0+ с 64-разрядной машиной / операционной системой процесс может обрабатывать до 4 ГБ оперативной памяти.