В 64-разрядном ядре 32-разрядный процесс может использовать все виртуальное адресное пространство 4 ГБ, за вычетом накладных расходов, если он построен как исполняемый файл с поддержкой больших адресов. В противном случае только 2 ГБ.
Это не включено по умолчанию для сравнения с кодом, который делает небезопасные предположения . Разработчик должен передать флаг компоновщику при сборке исполняемого файла. Флаг /LARGEADDRESSAWARE
для MSV C и --large-address-aware
для MinGW.
Когда в 32-разрядной версии Windows с включенным переключателем / 3GB работает программа с поддержкой больших адресов, она сможет отображать не более 3 ГБ виртуального адресного пространства (оставшиеся 1 ГБ зарезервированы для ядра). Однако в 64-разрядной системе Windows она должна быть в состоянии отобразить все 4 ГБ, за исключением некоторых накладных расходов.
Размер одного отдельного непрерывного выделения будет ограничен тем, куда попадают основной исполняемый файл и библиотеки DLL. отображается в память (а также в стек и любые другие случайные распределения), потому что, конечно, он должен go между любыми страницами, которые уже используются.
Без учета большого адреса , 32-разрядная программа, работающая на Windows (32-разрядная или 64-разрядная), по умолчанию будет иметь только 2 ГБ виртуального адресного пространства, независимо от того, сколько виртуального адресного пространства будет доступно Windows после вычитания. Использование адреса ядра и прочие накладные расходы.
В частности, ваша программа никогда не получит отображение виртуального адреса в пользовательском режиме выше отметки 2 ГБ, если не решит получать такие высокие адреса, объявив себя поддерживающим большие адреса. .
Исторически сложилось, что 32-битный Windows использовал разделение виртуального адресного пространства 2G: 2G между ядром и пользовательским пространством. Некоторые программы могут зависеть от разницы между двумя указателями на разные объекты, помещающиеся в целое положительное целое со знаком, или других предположений, которые не гарантируются ISO C, и LAA сломается. Поддержка большого адреса обеспечивает обратную совместимость с такими программами. ( Недостатки использования / LARGEADDRESSAWARE для 32-битных Windows исполняемых файлов? )