适用于 64 位 Windows) 的虚拟地址空间 (编程指南

默认情况下,基于 64 位 Microsoft Windows 的应用程序的用户模式地址空间为几 TB。 有关确切值,请参阅 Windows 和 Windows Server 版本的内存限制。 但是,应用程序可以指定系统应为低于 2 GB 的应用程序分配所有内存。 如果满足以下条件,此功能适用于 64 位应用程序:

  • 2 GB 地址空间已足够。
  • 代码包含许多指针截断警告。
  • 指针和整数可以自由混合。
  • 代码使用 32 位数据类型具有多态性。

所有指针仍为 64 位指针,但系统确保每个内存分配都低于 2 GB 限制,以便在应用程序截断指针时不会丢失重要数据。 指针可以截断为 32 位值,然后通过符号扩展或零扩展扩展到 64 位值。

若要指定此内存限制,请使用 /LARGEADDRESSAWARE:NO 链接器选项。 请注意,对于 ARM64 二进制文件, 将忽略 /LARGEADDRESSAWARE:NO 。 但是,请注意,使用此选项时可能会出现问题。 如果生成使用此选项的 DLL,并且 DLL 由不使用此选项的应用程序调用,则 DLL 可能会截断 64 位指针,该指针的上限为 32 位。 这可能会导致应用程序在没有任何警告的情况下失败。