Сколько памяти может получить доступ к 32-битному процессу в 64-битной операционной системе?
В Windows при нормальных условиях 32-битный процесс может получить доступ только к 2 ГБ ОЗУ (или 3 ГБ с помощью специального переключателя в файле boot.ini). Сколько памяти доступно при запуске 32-разрядного процесса в 64-разрядной операционной системе? Есть ли специальные переключатели или настройки, которые могут изменить это?
7 ответов
2 ГБ по умолчанию. Если приложение поддерживает большие адресные пространства (связано с /LARGEADDRESSAWARE), оно получает 4 ГБ (не 3 ГБ, см. http://msdn.microsoft.com/en-us/library/aa366778.aspx).
Они по-прежнему ограничены 2 ГБ, поскольку многие приложения зависят от того, что верхний бит указателей равен нулю.
4 ГБ минус то, что используется системой, если вы связываетесь с /LARGEADDRESSAWARE.
Конечно, вы должны быть еще более осторожны с арифметикой указателей, если вы установите этот флаг.
Никто, кажется, не затрагивает тот факт, что если у вас много разных 32-битных приложений, подсистема wow64 может отображать их в любом месте памяти выше 4G, поэтому в 64-битных окнах с достаточным объемом памяти вы можете запускать гораздо больше 32-битных приложений. чем на родной 32-битной системе.
32-разрядный процесс все еще ограничен теми же ограничениями в 64-разрядной ОС. Проблема заключается в том, что указатели памяти имеют ширину всего 32 бита, поэтому программа не может назначать / разрешать любой адрес памяти, превышающий 32 бита.
Один 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.
У вас есть такое же основное ограничение при запуске 32-битного процесса под Win64. Ваше приложение работает в 32-разрядной подсистеме, которая делает все возможное, чтобы выглядеть как Win32, и это будет включать ограничения памяти для вашего процесса (ниже 2 ГБ для вас, выше 2 ГБ для ОС)
Предел не 2 г или 3 ГБ, его 4 ГБ для 32-разрядных.
Причина, по которой люди думают, что ее 3 ГБ, заключается в том, что ОС показывает 3 ГБ свободной, когда у них действительно 4 ГБ системной памяти.
Его общая оперативная память составляет 4 ГБ. Так что, если у вас есть видеокарта 1 ГБ, которая считается как часть оперативной памяти, которую просматривает 32-битная ОС.
4Gig не 3 не 2 получил?