Может ли 32-разрядная программа использовать более 4 ГБ памяти в 64-разрядной ОС?

Является ли 32-разрядная программа, работающая на 64-разрядной ОС, способной использовать более 4 ГБ памяти, если она доступна?

Ответ 1

Короткий ответ: да. От ответа зависит длительный ответ. Существует аппаратная поддержка перерисовки страниц, которая в основном дает вашей программе окно из нескольких страниц в большую область памяти. Это окно, однако, должно управляться самой программой и не получит поддержки от диспетчера памяти. Есть примеры программ, подобных SQL в Windows. Однако, в общем, это плохая идея, и программа должна либо ограничить себя для 4 ГБ, либо перейти на 64 бита:)

Ответ 2

Обычно вы ограничиваетесь адресным пространством 2 ГБ, в котором все ваши распределения и их накладные расходы, фрагментация и т.д. должны совпадать с файлами с отображением памяти (включая вашу программу и библиотеки DLL, которые она использует). Это эффективно ограничивает вас до 1,5 ГБ.

С особой конфигурацией, например. /3GB, вы можете сделать более 2 ГБ доступными для приложений, но тем самым вы лишаете ядро ​​пространства, обходим вам кэширование файлов, обрабатываем емкость, и т.д.

В Win32 вы можете использовать больше с поддержкой PAE, но это не прозрачно, вам нужно управлять им самостоятельно.

Ответ 3

Только путем явного отображения диапазонов памяти 4 ГБ в его адресное пространство.