Сколько памяти может получить доступ к 32-битному процессу в 64-битной операционной системе? - PullRequest
78 голосов
/ 12 марта 2009

В Windows при нормальных условиях 32-битный процесс может получить доступ только к 2 ГБ ОЗУ (или 3 ГБ с помощью специального переключателя в файле boot.ini). Сколько памяти доступно при запуске 32-разрядного процесса в 64-разрядной операционной системе? Существуют ли какие-либо специальные переключатели или настройки, которые могут это изменить?

Ответы [ 7 ]

80 голосов
/ 12 марта 2009

2 ГБ по умолчанию. Если приложение поддерживает большое адресное пространство (связано с / LARGEADDRESSAWARE), оно получает 4 ГБ (не 3 ГБ, см. http://msdn.microsoft.com/en-us/library/aa366778.aspx)

Они по-прежнему ограничены 2 ГБ, поскольку многие приложения зависят от того, что верхний бит указателей равен нулю.

18 голосов
/ 12 марта 2009

4 ГБ минус то, что используется системой, если вы связываете с /LARGEADDRESSAWARE.

Конечно, вы должны быть еще более осторожны с арифметикой указателя, если вы установите этот флаг.

14 голосов
/ 23 января 2013

Никто, кажется, не затрагивает тот факт, что, если у вас много разных 32-битных приложений, подсистема wow64 может отобразить их в любом месте памяти выше 4G, поэтому в 64-битных окнах с достаточным объемом памяти вы можете запустить гораздо больше 32. приложений, чем в 32-битной системе.

7 голосов
/ 12 марта 2009

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

3 голосов
/ 01 июля 2017

Один 32-разрядный процесс в 64-разрядной ОС ограничен 2 ГБ. Но если он скомпилирован в EXE-файл с установленным битом IMAGE_FILE_LARGE_ADDRESS_AWARE, он имеет ограничение 4 ГБ, а не 2 ГБ - см. https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

В любом случае виртуальное адресное пространство ядра совместно используется всеми процессами. Вот почему, даже если у вас очень большое количество 32-битных процессов, они могут исчерпать память, несмотря на то, что у вас есть много памяти для вашей 64-битной операционной системы, скажем, 16 ГБ - 32-битная всего процессы могут быстро исчерпать доступное им виртуальное адресное пространство ядра (максимум 2 ГБ).

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

Подробнее см. https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx.

Что касается 32-разрядных операционных систем, вопреки распространенному мнению, для 32-разрядных операционных систем не существует физического ограничения в 4 ГБ. Например, 32-разрядные серверные операционные системы, такие как 32-разрядная версия Microsoft Windows Server 2008, могут получить доступ к 64 ГБ (выпуски Windows Server 2008 Enterprise и Datacenter) - с помощью расширения физических адресов (PAE), которое Впервые был представлен Intel в Pentium Pro, а затем AMD в процессоре Athlon - он определяет иерархию таблиц страниц из трех уровней с записями в таблице по 64 бита вместо 32, что позволяет этим ЦП напрямую обращаться к физическому адресному пространству. больше чем 4 гигабайта - теоретически, 32-битная ОС теоретически может получить доступ к 2 ^ 64 байта, или 17 179 869 184 гигабайта, но сегмент ограничен 4GB. Однако по маркетинговым причинам Microsoft ограничил максимально доступную память в несерверных операционных системах всего 4 ГБ или даже 3 ГБ. Таким образом, один процесс может получить доступ к более чем 4 ГБ в 32-разрядной ОС, например, сервер Microsoft SQL.

0 голосов
/ 14 мая 2012

Предел не 2 г или 3 ГБ, его 4 ГБ для 32-разрядных.

Причина, по которой люди думают, что ее 3 ГБ заключается в том, что ОС показывает 3 ГБ свободной, когда у них действительно 4 ГБ системной памяти.

Его общая оперативная память 4 ГБ. Так что если у вас есть видеокарта 1 ГБ, которая считается как часть оперативной памяти, просматриваемой 32-битной ОС.

4Гиг не 3, не 2, понял?

0 голосов
/ 12 марта 2009

У вас есть такое же основное ограничение при запуске 32-битного процесса под Win64. Ваше приложение работает в 32-разрядной подсистеме, которая делает все возможное, чтобы выглядеть как Win32, и это будет включать ограничения памяти для вашего процесса (ниже 2 ГБ для вас, более 2 ГБ для ОС)

...