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

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

是否可以安全地假设 任何 x86 编译的应用程序在 x64 版本下 总是 运行相同 OS 应用程序的编译来源?

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

UnixLinux呢?是否有任何注意事项

否,对于 运行 的 x86 代码,它需要在兼容或传统模式下 运行。如果 OS 在兼容模式下不支持 运行ning 进程,程序很可能无法 运行.

Linux 和 IFAIK Windows 目前支持兼容模式,看起来还有更多或多或少的支持。我的理解是 NETBSD 需要一个特殊的模块来支持它,所以它不一定会得到支持并且它表明很可能存在 OS 的可能性已被完全放弃。

此外,将来还有可能破坏向后兼容性,这已经在 CPU 上发生了,因为长模式不再提供虚拟 x86 模式,你不能 [=32] =] 16 位程序在 64 位 Windows 或 Linux 下不再存在。

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

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

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

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