在 64 位 CPU 上执行 32 位程序时,我们是否可以假设底层硬件将使用内存和 CPU 寄存器中的 32 位值来存储整数?
鉴于这些设置:
- Intel i5 + Windows 32 位 + 32 位应用程序
- Intel i5 + Windows 64 位 + 32 位应用程序
请解释每种设置的缺点。使用第二个效率会降低,因为 CPU 需要额外的工作来忽略寄存器值的停止吗?
当 x86_64 处理器执行 32 位代码时,它实际上是在 i686 模式下运行。这一切都是在硬件中实现的,因此没有性能损失。
无论操作系统是 32 位还是 64 位,用户空间 32 位程序都将以“32 位模式”执行,因此行为应该相同。
唯一的潜在缺点是程序可能需要动态链接到一些 32 位库,这些库默认情况下未安装在 64 位操作系统上。这种情况在 Linux 上更为常见,程序动态链接到外部库更为常见;我在 Windows 上能想到的唯一示例是,如果程序需要 Visual C++ 运行时库,那么您必须安装 32 位版本(如果其他程序需要,可能与 64 位版本一起安装)。所以简而言之,您可能需要安装更多 64 位设置的东西。
此外,实际操作系统在 64 位设置上可能会消耗更多内存,但是 32 位系统的一个缺点是您的整个系统内存大小限制为 4GB(或实际上大约 3.5 GB,因为一些内存空间被映射到硬件)。
64 位知识库:在 Win32 和 Win64 中应用程序可以访问多少内存?