Использование 32-битной памяти приложения в 64-битной операционной системе.

13

Если моя операционная система 64-битная, могут ли мои 32-битные приложения использовать 64-битную память (> 3,5 ГБ)?

Pete2k
источник

Ответы:

6

Если приложение поддерживает AWE, то оно может использовать адресное пространство за пределами 4 ГБ, хотя и менее эффективно, чем 64-разрядное приложение. Даже 32-разрядные процессы в 32-разрядных вариантах Windows могут получить доступ к более чем 32-разрядному адресному пространству, если PAE разрешен и процесс может его использовать.

Отдельный 32-битный процесс (который не поддерживает AWE) обычно ограничен 3Gb (первые Гб его виртуального адресного пространства зарезервированы для действий, связанных с ядром), но если вы запускаете несколько процессов, они смогут использовать больше в total (каждый может использовать до 3Gb, если позволяет общий объем памяти), поскольку их виртуальные адресные пространства не являются общими.

Ограничение на процесс является более полезным в Unix-подобной среде, где службы, как правило, основаны на процессах, а не на потоках (несколько потоков в одном процессе совместно используют ресурсы процессов и, следовательно, совместно используют единое виртуальное адресное пространство 3Gb), как это более распространено. в Windows (запуск нового процесса в Windows довольно дорогой, поэтому потоки предпочтительнее, в большинстве сред Unix запуск нового процесса не намного требует больше ресурсов, чем запуск нового потока) . Например, это не очень полезно для компьютера, на котором запущен только SQL Server, поскольку он будет состоять только из одного процесса, поэтому достигнет предела 3Gb (некоторые выпуски могут быть настроены для поддержки AWE, но не все, и функция будет удалена в следующем основном выпуске) .

Помимо того, что 32-разрядные процессы могут использовать в общей сложности более 3 Гб, операционная система сможет использовать любую неиспользуемую память для кэширования диска, поэтому она не может быть потрачена впустую, если процессы не открывают файлы таким образом. как сказать ОС не мешать делать это.

Дэвид Спиллетт
источник
32-разрядный процесс с набором IMAGE_FILE_LARGE_ADDRESS_AWARE имеет ограничение 4 ГБ, а не 3. msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Марк Соул
5

Если приложение использует AWE , то да (хотя это не ограничивается 64-битными ОС). Без этого процесс все еще ограничен адресным пространством 4 ГБ.

Игнасио Васкес-Абрамс
источник
-1, хотя это правда, я думаю, что частичный ответ вводит в заблуждение, поскольку ни у одного (не AWE) 32-битного процесса никогда не будет доступно 4 ГБ ОЗУ.
pipTheGeek
@pipTheGeek Ошибочный: 32-битный процесс с установленным IMAGE_FILE_LARGE_ADDRESS_AWARE = ​​4 ГБ. msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Марк Соул
@ Марк - я забыл об этом, и я исправил свой ответ ниже. Я все еще думаю, что этот ответ неполон, хотя.
pipTheGeek
3

Сорта, в зависимости от того, что вы имеете в виду.

Предполагая Windows ...

Если ОС 64-разрядная, 32-разрядный процесс по умолчанию получает 2 ГБ виртуального адресного пространства с адресом пользователя. Если заголовок PE файла .exe помечен флагом IMAGE_FILE_LARGE_ADDRESS_AWARE, то процесс получит 4 ГБ виртуального адресного пространства, адресуемого пользователем. В любом случае виртуальное адресное пространство ядра совпадает с 64-разрядными процессами, поскольку оно совместно используется всеми процессами. Также следует отметить, что 64-разрядные процессы, которые не устанавливают флаг IMAGE_FILE_LARGE_ADDRESS_AWARE, также имеют доступ только к 2 ГБ виртуального адресного пространства пользователя.

То, что вы слышите о специальных загрузочных флагах, переключателях 3 ГБ, / 3 ГБ или / userva, относится к 32-разрядным операционным системам и не применяется в 64-разрядных Windows.

Все это подробно описано на странице « Ограничения памяти Microsoft для выпусков Windows» .

Ответ Дэвида Спиллета также затрагивает еще один момент: несколько процессов, все из которых ограничены 2 ГБ пользовательского пространства, могут по-прежнему использовать значительные объемы ОЗУ, если они доступны, как и файловый кэш.

afrazier
источник
0

32-разрядный процесс в 32-разрядной ОС имеет адресное пространство 4 ГБ, 2 ГБ которого зарезервировано ОС, 2 ГБ доступно для процесса.
Существует параметр, который можно указать для ОС (/ 3 ГБ), который изменяет объем, зарезервированный для ОС, только на 1 ГБ и позволяет процессу иметь 3 ГБ, НО, только если процесс объявляет себя как большой адрес, осведомленный в флагах исполняемого файла.

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

Все это для процессов, не поддерживающих AWE. Если процесс способен использовать AWE, то, как говорили другие, он может использовать большое адресное пространство, но менее эффективно, чем 64-битный процесс.

PAE позволяет 32-разрядной ОС использовать более 4 ГБ ОЗУ, однако она имеет проблемы с совместимостью и была отключена в XP одним из пакетов обновления, поэтому она доступна только в версиях серверных ОС.

pipTheGeek
источник