虚拟地址空间(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 可能会截断其高 32 位的 64 位指针。 这可能会导致应用程序失败,且没有任何警告。