Один 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-битные вызовы в пользовательском режиме .