Я видел, что в 64-битной ОС Windows доступное виртуальное адресное пространство пользователя составляет 8 террабайт. Но если программа, которую мы выполняем, работает в 32-битном режиме совместимости, остается ли доступной такая большая часть пользовательского пространства? или она ведет себя как обычная 32-битная ОС и предоставляет пользователю только 2 ГБ адресного пространства?
Виртуальное адресное пространство в 64-битных системах, работающих в режиме совместимости
Ответы (6)
У Microsoft есть диаграмма, показывающая различные ограничения: Ограничения памяти для выпусков Windows
Подводя итог только виртуальному адресному пространству пользовательского режима:
- 32-bit Windows:
- 32-bit process: 2 GB by default; 3 GB with
/LARGEADDRESSAWARE:YESand 4GT
- 32-bit process: 2 GB by default; 3 GB with
- 64-bit Windows (x64 architecture):
- 32-bit process: 2 GB by default; 4 GB with
/LARGEADDRESSAWARE:YES - 64-битный процесс: 8 ТБ по умолчанию; 2 ГБ с
/LARGEADDRESSAWARE:NO
- 32-bit process: 2 GB by default; 4 GB with
4GT — это 4-гигабайтный тюнинг:
- XP: переключатель
/3GBboot.ini - Перспектива:
bcdedit /set increaseuserva 3072
Марк Руссинович сделал запись в блоге, объясняющую многие из этих ограничений: Windows: виртуальная память
64-bit process: 8 TB by default; 2 GB with /LARGEADDRESSAWARE:NO — Даже это вариант для ограничения адресного пространства 64-битных процессов. Очень интересно! Никогда не знал, что даже уменьшение объема памяти возможно с помощью флагов. Интересно, какой вариант использования потребует такого уменьшения размера. Мы всегда хотим увеличить объем памяти, занимаемой нашим процессом. Хотя очень хорошая информация.
- person RBT; 18.08.2016
Ваш процесс будет видеть только виртуальное адресное пространство размером 4 ГБ, когда он работает как 32-разрядный процесс. Он не сможет обращаться к чему-либо выше.
Мой первоначальный ответ был довольно плохим. Вот ссылка, которая довольно хорошо объясняет, о чем говорил JaredPar.
http://msdn.microsoft.com/en-us/library/ms189334.aspx
Что касается аппаратного обеспечения, когда вы работаете в режиме совместимости (т. е. установлен IA32_EFER.LMA и бит L в дескрипторе сегмента CS сброшен), сегменты ведут себя как 32-битные сегменты. То есть:
- база сегмента ограничена 32 битами.
- предел сегмента также ограничен 32 битами (с использованием бита G).
Это эффективно ограничивает вас 4 ГБ виртуальных адресов. Я не знаком с тем, как ОС разбивает виртуальную память на разделы в различных режимах, но это аппаратное ограничение. (извините... я аппаратный специалист, а не эксперт по ОС)
Если ваша программа работает как 32-битный процесс в подсистеме Wow64, она увидит то же адресное пространство, что и в настоящей 32-битной ОС. Без специальных опций 32-битному процессу будет доступно 2 ГБ памяти.
Единственная разница заключается в доступной памяти, если вы используете LargeAddressAware< /а> вариант. В обычном 32-битном процессе это позволяет использовать 3 ГБ адресуемой памяти. В процессе Wow64 он может видеть до 4 ГБ (Источник)
Следует отметить, что при запуске 32-разрядного процесса в IIS 6.0+ с 64-разрядной машиной/ОС процесс может адресовать до 4 ГБ памяти.