Виртуальное адресное пространство в 64-битных системах, работающих в режиме совместимости - PullRequest
9 голосов
/ 29 января 2009

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

Ответы [ 6 ]

12 голосов
/ 29 января 2009

У 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-гигабайтная настройка:

  • XP: /3GB переключатель boot.ini
  • Vista: bcdedit /set increaseuserva 3072

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

0 голосов
/ 12 апреля 2011

Следует отметить, что при запуске 32-разрядного процесса на IIS 6.0+ с 64-разрядной машиной / ОС процесс может адресовать до 4 ГБ памяти.

0 голосов
/ 29 января 2009

Что касается аппаратного обеспечения, когда вы работаете в режиме совместимости (т.е. установлен IA32_EFER.LMA и бит L очищен в дескрипторе сегмента CS), сегменты ведут себя как 32-битные сегменты. То есть:

  • база сегмента ограничена 32 битами.
  • предел сегмента также ограничен 32 битами (с использованием бита G).

Это эффективно ограничивает вас 4 ГБ виртуальных адресов. Я не знаком с тем, как ОС разделяет виртуальную память в различных режимах, но это аппаратное ограничение. (простите ... я аппаратный парень, а не эксперт по ОС)

0 голосов
/ 29 января 2009

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

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

0 голосов
/ 29 января 2009

Если ваша программа работает как 32-битный процесс в подсистеме Wow64, она увидит то же адресное пространство, что и в реальной 32-битной ОС. Без специальных опций 32-битный процесс будет иметь 2 ГБ памяти.

Единственное отличие - доступная память, если вы используете опцию LargeAddressAware . В обычном 32-битном процессе это позволяет использовать 3 ГБ адресуемой памяти. В процессе Wow64 он может видеть до 4 ГБ ( Источник )

0 голосов
/ 29 января 2009

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

...