Как работает флажок Large Address Aware для 32-разрядных приложений на 64-разрядных компьютерах? - PullRequest
8 голосов
/ 03 марта 2011

Я читал, что 32-разрядные приложения Windows ограничены 2 ГБ ОЗУ, поскольку верхние 2 ГБ адресного пространства зарезервированы для ОС Windows (и, iirc, VRAM). Если вы используете флаг / 3GB на 32-битном WinXp, вы можете получить до 3 ГБ оперативной памяти, доступной для адресации, но обычно вам нужно настроить значения userva. Я слышал, что в 64-разрядных выпусках Windows с большим флагом определения адресов в заголовке PE и более 4 ГБ ОЗУ приложение может использовать все 4 ГБ адресного пространства для управления собственной памятью.

С другой стороны, я почти уверен, что когда вы вызываете Windows API, вы должны вызывать ячейки памяти в предоставленном вами 32-битном адресном пространстве. Итак, какой именно объем памяти может использовать 32-разрядное приложение с поддержкой больших адресов для себя в 64-разрядной среде? А почему?

Спасибо.

1 Ответ

5 голосов
/ 03 марта 2011

Виртуальное адресное пространство расширено до 4 ГБ.Если вы не используете API расширения оконного адреса , максимальный объем доступной памяти составляет 4 ГБ.Часть этого пространства будет занята ОС для .dlls и других подобных вещей, но у вас будет возможность вернуть память, которая использует все 32-битные указатели.

Кстати, если выне учитывает большой адрес, все указатели памяти не будут отрицательными при приведении к INT_PTR.Это на самом деле является источником более чем нескольких незначительных ошибок при использовании большого флага, учитывающего адрес, так как указатели обрабатываются со знаковыми значениями.

...