【发布时间】:2015-05-01 20:18:22
【问题描述】:
我知道,一个人编写的每个程序最终都必须归结为机器代码——这是编译器产生的,是可执行文件的组成部分,也是处理器能够理解的唯一语言。我也知道不同的处理器可能有不同的指令集(我知道 65c816 汇编,我想它与今天的计算机有很大的不同)。
不过,这就是我没有得到的:如果存在不同的指令集,那么为什么我们似乎不必在每次使用软件时都关心这一点?
如果一个程序是为一个特定的 CPU 编译的,它可能无法在另一个 CPU 上运行 - 但是,我从未看到诸如“英特尔用户下载此版本,AMD 用户下载此版本”之类的通知。我什至不必知道我在什么 CPU 上,每个可执行文件似乎都在……工作。显然,编译器也是如此 - 没有一个单独的版本,比如 GCC,每个处理器都有,对吧?
我知道指令集的差异比以前要微妙得多,但即便如此,至少应该有一点区别。我想知道为什么似乎没有。
什么是我不明白的?
【问题讨论】:
-
最流行的现代计算机 (Intel/AMD) 使用非常相似的处理器架构 en.wikipedia.org/wiki/X86
-
如果您运行的是为多 CPU 架构提供的操作系统,则需要小心。例如,尝试在 Raspberry Pi 上运行 x86/x64 PC Linux 二进制文件,反之亦然,看看效果如何。
-
是的,像 gcc 这样的编译器需要为它们支持的每个 CPU 架构使用不同的后端(并且,如果它编译的架构与编译器所在的架构不同)运行,这称为交叉编译)。
标签: cpu executable machine-code