Виртуальное адресное пространство (руководство по программированию для 64-разрядной версии Windows)

По умолчанию 64-разрядные приложения Microsoft Windows имеют адресное пространство в пользовательском режиме в несколько терабайт. Точные значения см. в разделе Ограничения памяти для выпусков Windows и Windows Server. Однако приложения могут указать, что система должна выделять всю память для приложения менее 2 гигабайт. Эта функция полезна для 64-разрядных приложений, если выполняются следующие условия:

  • Достаточно 2 ГБ адресного пространства.
  • Код содержит множество предупреждений об усечении указателя.
  • Указатели и целые числа свободно смешиваются.
  • Код имеет полиморфизм с использованием 32-разрядных типов данных.

Все указатели по-прежнему являются 64-разрядными указателями, но система гарантирует, что каждое выделение памяти будет ниже ограничения в 2 ГБ, поэтому при усечении указателя приложение не потеряет значительные данные. Указатели можно усекать до 32-разрядных значений, а затем расширять до 64-разрядных значений с помощью расширения знака или расширения нуля.

Чтобы указать это ограничение памяти, используйте параметр компоновщика /LARGEADDRESSAWARE:NO . Обратите внимание, что параметр /LARGEADDRESSAWARE:NO игнорируется для двоичного файла ARM64. Однако имейте в виду, что при использовании этого параметра могут возникнуть проблемы. Если вы создаете библиотеку DLL, которая использует этот параметр, и библиотека DLL вызывается приложением, которое не использует этот параметр, библиотека DLL может усечь 64-разрядный указатель, верхние 32 бита которого являются значительными. Это может привести к сбою приложения без каких-либо предупреждений.