我一直在使用Jeffrey Richter的C / C ++阅读Windows,并在有关将32位应用程序移植到64位环境的Windows内存架构的章节中遇到了以下片段。
如果系统能够以某种方式保证不会在0x00000000'7FFFFFFF之上进行任何内存分配,那么应用程序将正常工作。当高33位为0时,将64位地址截断为32位地址不会产生任何问题。
我在理解为什么系统需要保证在0x00000000'7FFFFFFF
而不是0x00000000'FFFFFFFF
之上没有进行内存分配时遇到了一些麻烦。只要高32
位是0
,就不应该截断地址吗?我可能会遗漏一些东西,如果有更多关于Windows的知识的人能解释为什么会出现这种情况,我会非常感激。
答案 0 :(得分:2)
并非所有32位系统/语言都使用无符号值作为内存地址,因此第32位在某些上下文中可能具有不同的含义。通过将地址空间限制为31位,您不会遇到该问题。而且,Windows限制32位应用程序访问高于2 GB的地址而不使用特殊扩展来扩展它,因此大多数应用程序不需要第32位。