на Windows 7 64bit, сколько адресного пространства может получить доступ 32-разрядная программа?

при использовании флага LARGEADDRESSAWARE моя 32-битная программа может получить доступ к 4 ГБ адресного пространства или только 3 ГБ адресного пространства? Зачем?


person Aviad Rozenhek    schedule 12.05.2011    source источник


Ответы (4)


32-битный процесс с установленным LARGEADDRESSAWARE может адресовать 4 ГБ в 64-битной Windows. Это возможно, потому что именно так это реализовали замечательные инженеры Microsoft.

Это задокументировано здесь.

person David Heffernan    schedule 12.05.2011
comment
по ссылке: Виртуальное адресное пространство на 32-битный процесс: 2 ГБ, 4 ГБ, если приложение скомпилировано с переключателем / LARGEADDRESSAWARE - person Aviad Rozenhek; 16.05.2011

может быть, anwser есть

32-битный процесс будет обращаться к 2 ГБ ОЗУ, с флагом LARGEADDRESSAWARE он достигает 4 ГБ

person Cédric Julien    schedule 12.05.2011


В большинстве ОС ваше 32-битное пространство разбито на части, которые ваша программа (код пользователя) может выделять и использовать, а также на разделы, которыми владеет ядро. Если вы не пишете свою собственную ОС / ядро, позвольте системным API (таким как malloc / free, new / delete в C / C ++) или базовому управлению в python, java управлять выделением памяти за вас.

Однако, если у вас заканчивается память, начинайте учитывать

  1. У меня где-то течь? Вы не освобождаете каждый указатель, который изменяете. Замечательные инструменты, такие как valgrind может помочь в их поиске.
  2. Нужно ли мне переделывать мою программу, чтобы использовать меньше памяти? Вы делаете такие вещи, как сохранение каждой строки данных, которые вы читаете из огромного файла в массиве на python или java. Ищите вещи, которые можно выбросить
person Andrew    schedule 12.05.2011
comment
это ответ на другой вопрос? - person David Heffernan; 12.05.2011