Как проверить, какой максимальный объем памяти вы можете использовать из адресного пространства в одном процессе - PullRequest
3 голосов
/ 19 декабря 2011

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

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

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

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

1 Ответ

3 голосов
/ 19 декабря 2011

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

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

...