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

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

Ответы [ 3 ]

2 голосов
/ 07 мая 2011

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

1 голос
/ 07 мая 2011

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

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

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

0 голосов
/ 07 мая 2011

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

...