Виртуальное адресное пространство в 64-разрядных системах, работающих в режиме совместимости

StackOverflow https://stackoverflow.com/questions/490520

Вопрос

Я видел, что в 64-разрядной ОС Windows доступное пользовательское виртуальное адресное пространство составляет 8 terra байт.Но если программа , которую мы выполняем на этом, работает в 32 - разрядном режиме совместимости , остается ли такая большая часть пользовательского пространства доступной ?или он ведет себя как обычная 32-разрядная ОС и предоставляет пользователю только 2 ГБ адресного пространства?

Это было полезно?

Решение

У Microsoft есть диаграмма, показывающая различные ограничения: Ограничения памяти для версий Windows

Подводя итог только виртуальному адресному пространству пользовательского режима:

  • 32-разрядная версия Windows:
    • 32-разрядный процесс:2 ГБ по умолчанию;3 ГБ с /LARGEADDRESSAWARE:YES и 4GT
  • 64-разрядная версия Windows (архитектура x64):
    • 32-разрядный процесс:2 ГБ по умолчанию;4 ГБ с /LARGEADDRESSAWARE:YES
    • 64-разрядный процесс:8 ТБ по умолчанию;2 ГБ с /LARGEADDRESSAWARE:NO

4GT - это настройка на 4 гигабайта:

  • ХР: /3GB переключатель boot.ini
  • Перспектива: bcdedit /set increaseuserva 3072

Марк Руссинович сделал запись в блоге, объясняющую многие из этих ограничений: Раздвигая границы возможностей Windows:Виртуальная память

Другие советы

Ваш процесс будет видеть виртуальное адресное пространство объемом 4 ГБ только тогда, когда он запущен как 32-разрядный процесс.Он не сможет обратиться ни к чему более высокому.

Мой первоначальный ответ был довольно плохим.Вот ссылка, которая довольно хорошо объясняет, о чем говорил Джаредпар.

http://msdn.microsoft.com/en-us/library/ms189334.aspx

Что касается аппаратного обеспечения, то, когда вы работаете в режиме совместимости (т.е.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 ГБ оперативной памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top