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

Moh*_*nde 0 c x86-64 cpu-architecture

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

Mat*_*lia 6

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

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

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