В Windows в обычных условиях 32-разрядный процесс может получить доступ только к 2 ГБ ОЗУ (или к 3 ГБ с помощью специального переключателя в файле boot.ini). Сколько памяти доступно при запуске 32-битного процесса в 64-битной операционной системе? Есть ли какие-то специальные переключатели или настройки, которые могут это изменить?
86
Ответы:
По умолчанию 2 ГБ. Если приложение поддерживает большое адресное пространство (связано с / LARGEADDRESSAWARE), оно получает 4 ГБ (а не 3 ГБ, см. Http://msdn.microsoft.com/en-us/library/aa366778.aspx )
Они по-прежнему ограничены 2 ГБ, поскольку многие приложения зависят от нулевого верхнего бита указателей.
источник
since many application depends on the top bit of pointers to be zero
вы имеете в виду, что 32-й бит схемы адресации не учитывается и не используется при обходе адресного пространства процесса.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То, что вы слышите о специальных загрузочных флагах, 3 ГБ,
/3GB
переключателях или/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 editions) - с помощью расширения физического адреса (PAE), которое впервые было введено Intel в Pentium Pro, а затем AMD в процессоре Athlon - он определяет иерархию таблицы страниц из трех уровней, с записями таблицы по 64 бита вместо 32, что позволяет этим процессорам напрямую обращаться к физическому адресному пространству размером более 4 гигабайт - так что теоретически 32-битная ОС может получить доступ к 2 ^ 64 байтам теоретически или 17 179 869 184 гигабайтам, но сегмент ограничено 4 ГБ. Однако по маркетинговым причинам Microsoft ограничила максимально доступную память в несерверных операционных системах до 4 ГБ или даже 3 ГБ. Таким образом, один процесс может получить доступ к более чем 4 ГБ в 32-разрядной ОС - примером является сервер Microsoft SQL.
32-битные процессы в 64-битной Windows не имеют недостатков по сравнению с 64-битными процессами в использовании общего виртуального адресного пространства ядра (также называемого системным пространством ). Все процессы, будь то 64-битные или 32-битные, в 64-битной Windows используют одно и то же 64-битное системное пространство.
Учитывая тот факт, что системное пространство совместно используется всеми процессами , в 32-разрядной Windows процессы, которые создают большое количество дескрипторов (например, потоки, семафоры, файлы и т. Д.), Занимают системное пространство объектами ядра и могут исчерпать память даже если у вас много доступной памяти. Напротив, в 64-битной Windows пространство ядра является 64-битным и не ограничено 4 ГБ. Все системные вызовы, выполняемые 32-битными приложениями, преобразуются в собственные 64-битные вызовы в пользовательском режиме .
источник
У вас есть такое же базовое ограничение при запуске 32-битного процесса под Win64. Ваше приложение работает в 32, но подсистеме, которая изо всех сил выглядит как Win32, и это будет включать ограничения памяти для вашего процесса (нижние 2 ГБ для вас, верхние 2 ГБ для ОС)
источник
Предел не 2g или 3gb его 4gb для 32bit.
Причина, по которой люди думают, что это 3 ГБ, заключается в том, что ОС показывает 3 ГБ свободно, когда у них действительно 4 ГБ оперативной памяти.
Его общая оперативная память 4 ГБ. Итак, если у вас есть видеокарта 1 ГБ, которая считается частью общей оперативной памяти, просматриваемой 32-битной ОС.
4Gig не 3 не 2 получил?
источник