AMD64在i586上运行,反之亦然?

时间:2011-03-31 00:05:21

标签: c cpu-architecture x86-64

我有一个小型的C程序,我希望从Linux移植到Windows。我可以用MinGW编译器做到这一点,我注意到它有两个不同的前缀,amd64和i586。我在i686计算机上,我想知道我是否使用和amd64架构编译我的C程序,它会在我的i686机器上运行吗?反之亦然?
更新:
是否有编译器可以编译C代码以在任何架构上运行?

1 个答案:

答案 0 :(得分:6)

如果您编译i586的代码(实际上通常称为x86),它应该在AMD64(x86-64)处理器上正常工作,因为x86-64处理器可以执行“传统”32位代码,只要操作系统支持这一点 - 主流操作系统通常会这样做; Windows对32位应用程序的支持非常好,因为普通Windows系统上安装的大多数应用程序仍然是32位。

反之则不成立,因为x86-64指令集(松散地说)是x86架构的扩展,因此任何非64位x86处理器都不会知道如何解释新机器代码(即使它知道它,它也没有资源来运行它。)

对于编辑,您无法生成本地运行的机器代码;在这种情况下,通常的解决方案是使用伪编译语言输出需要安装运行的体系结构特定VM的中间级机器代码(这里的经典示例是Java和.NET)。相反,如果使用编译为“本机代码”的语言,则必须为每个目标平台生成可执行文件。