假设任何x86编译的应用程序总是在x64版本下运行是安全的吗?

Is it safe to assume that any x86 compiled app would always run under x64 edition?

本文关键字:版本 运行 安全 x64 任何 编译 应用程序 假设 x86      更新时间:2023-10-16

是否可以安全地假设任何 x86编译的应用程序将始终在编译应用程序的x64版本的操作系统下运行 ?

据我所知,对于Windows操作系统,答案是"是"Windows x86仿真层也是为了同样的目的而构建的。但是,我只是想再次确认这里的专家。

Unix

, Linux ?是否有任何警告?

不,x86代码需要在兼容或遗留模式下运行。如果操作系统不支持以兼容模式运行进程,程序很可能无法运行。

Linux和IFAIK Windows目前支持兼容模式,看起来更多的人也或多或少地支持它。我的理解是NETBSD需要一个特殊的模块来支持这一点,所以它不一定没有特别的注意,它将被支持,这表明很有可能存在的操作系统的可能性已经完全放弃。

除此之外,未来还有可能打破向后兼容性,这已经发生在CPU上,因为虚拟x86模式不再从长模式中可用,也就是说你不能在64位Windows或Linux下运行16位程序了。

这也可能发生在操作系统方面,开发人员可以决定不再支持兼容模式。请注意,这种情况也可能发生,因为可能通过首先切换到遗留模式来支持虚拟x86模式,但如果可能的话,似乎没有人愿意这样做。同样,Windows或Linux开发人员似乎都没有在64位内核中实现以遗留模式运行内核代码的可能性。

前两节表明,未来甚至现在的迹象表明,这可能并不总是可能的。

此外,由于这是一个c++问题,您必须问自己为什么要做出这样的假设?如果写得好,你的代码应该能够编译为64位模式-因为你没有依赖于特定宽度的数据类型,你呢?

No。我们有一大堆的Debian服务器没有使用Multi-Arch i386(32位)库。在Windows Server Core上,WoW64(32位子系统)是可选的。因此,对于Linux和Windows,已知的64位系统都不能运行x86可执行文件。