Сколько памяти может получить 32-разрядный процесс в 64-разрядной операционной системе?
в Windows при нормальных обстоятельствах 32-битный процесс может получить доступ только к 2 ГБ ОЗУ(или 3 ГБ со специальным переключателем в загрузке.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=против 85).aspx Для больше подробности.
Что касается 32-разрядных операционных систем, вопреки мнению, нет физического предела 4 ГБ для 32-разрядных операционных систем. Например, 32-разрядные серверные операционные системы, такие как Microsoft Windows Server 2008 32-разрядный может получить доступ до 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 server является примером.
У вас есть то же основное ограничение при запуске 32-битного процесса под Win64. Ваше приложение работает в 32, но подсистеме, которая делает все возможное, чтобы выглядеть как Win32, и это будет включать ограничения памяти для вашего процесса (Нижний 2GB для вас, верхний 2GB для ОС)
предел не 2g или 3gb его 4gb для 32bit.
причина, по которой люди думают, что его 3gb заключается в том, что ОС показывает 3GB бесплатно, когда у них действительно есть 4gb системной ОЗУ.
его общая ОЗУ 4 ГБ. Поэтому, если у вас есть видеокарта 1 gb, которая считается частью общей ОЗУ, просматриваемой 32-битной ОС.
4Gig не 3 Не 2 понял?