我最近注意到,在 64 位 Windows 操作系统中,大多数 32 位应用程序都可以安装。但在 32 位操作系统中,大多数 64 位应用程序无法安装。为什么会这样?
答案1
64 位应用程序被编译以利用 x86-64 处理器中的 64 位寄存器,这也要求处理器在正确的模式下运行,并且 OS API 调用字长匹配。
32 位操作系统通常使用保护模式,仅允许使用 32 位寄存器(例如EAX
)EBX
。在 x86-64 处理器上,64 位兼容性添加为长模式,64 位操作系统可在该平台上运行。
此外,64 位版本的 Windows 还包含WoW64兼容层,可动态地将 32 位 API 调用转换为 64 位等效调用,并在进程计划运行时在 32 位保护模式和 64 位长模式之间切换 CPU。
64 位处理器的另一个有趣之处是硬件虚拟化。如果硬件支持得当,有时可以运行包含 64 位客户操作系统的虚拟机(例如使用 VirtualBox 或 VMWare),而主机操作系统仅为 32 位(同样,考虑到 x86-64 硬件虚拟化的可用性)。有关使用 VirtualBox 执行此操作的详细信息,请参阅本节手册。
答案2
64 位应用程序需要 32 位应用程序无法提供的资源。这有点像把方形钉子放入圆孔中。
答案3
此外,32 位应用程序最多只能分配 4 GB 的 RAM。由于 64 位应用程序的限制要高得多(最多 512 GB 的 RAM),因此如果 64 位程序需要分配更多内存,就会出现问题。该程序会崩溃,并且您的计算机会生成 BSoD,表明它无法分配内存。