假设任何x86编译的应用程序总是在x64版本下运行是安全的吗?
Is it safe to assume that any x86 compiled app would always run under x64 edition?
是否可以安全地假设任何 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可执行文件。
- 在运行时读取 libstdc++ 版本
- Qt版本应该在其他计算机上运行吗?
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 如何在运行时对程序创建的.sys文件设置文件版本
- Qt 应用程序中与Qt版本相关的运行时错误
- 从 qmake 运行脚本以获取内部版本号
- VS2015中内置的程序的发布版本与Qt运行然后关闭没有错误?
- Winapi可以一直使用并且可以在所有版本的Windows上运行吗?
- wxWidgets 运行时错误(不匹配版本)
- 根据运行时参数调用模板函数的不同版本
- 该程序是针对协议缓冲区运行时库的2.6.1版本编译的,该版本与已安装的版本(3.5.0)不兼容
- "此版本的 C:\TURBOC3\BIN\TCC.EXE 与您运行的 Windows 版本不兼容。
- 使用一个 C 程序运行 python 脚本(不同的 python 版本)
- 无法运行Qt C++发布版本。 'The procedure entry point could not be located'
- 在不同的 Ubuntu 版本中编译和运行 c++ 应用程序
- 调用64位C/C++DLL的C#应用程序崩溃,但运行32位版本
- C 中的运行时错误.搬迁协议版本%d
- 在 MSVC 中将某些库的目标平台版本设置为 10.x 是否使程序与在 Windows Vista/7/8 上运行不兼容
- visualstudio2008解决方案发布版本运行时致命错误
- 调试版本运行,但发布给出0xc000007b -缺失的dll