2011-12-18 2 views
3

Если в 32-битном исполняемом файле не указан переключатель LARGEADDRESSAWARE, в распоряжении будет 2 ГБ памяти (дать или принять). Когда переключатель LARGEADDRESSAWARE присутствует в PE флагах исполняемого этот предел может быть (поправьте меня, если я ошибаюсь):Как проверить, какой максимальный объем памяти вы можете использовать в адресном пространстве в одном процессе

  • 2 Гб, если 32 бит Windows, не был запущен с/3GB переключатель
  • 3GB если 32-разрядная Windows была запущена с помощью переключателя/3GB
  • почти до 4 ГБ, если процесс выполняется под 64-разрядной ОС Windows в виде 32-битного процесса.

Мой вопрос: как определить этот предел памяти (с и/или без флага LARGEADESSESSAWARE)? И в качестве побочного: есть ли перечисление возможностей выше правильного?

Примечание: меня не интересует объем памяти, который использует этот процесс, а также не ограничение из-за внешних эффектов, а максимальный объем памяти, который я могу выделить в идеальном случае.

ответ

3

Я думаю, что лучший подход - позвонить GetSystemInfo и выяснить, что вам нужно от lpMinimumApplicationAddress и lpMaximumApplicationAddress. Вы можете просто вычесть первое из последнего, чтобы получить общее доступное адресное пространство памяти.

Ваши три пулевые точки различных возможностей верны.