Поделиться через


Виртуальное адресное пространство (руководство по программированию для 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 бит которого имеет значительное значение. Это может привести к сбою приложения без каких-либо предупреждений.