这只是个理论问题。我主修计算机科学,对低级编程非常感兴趣。我喜欢探索引擎盖下的世界。我的专长是编译器设计。
不管怎样,当我在编写我的第一个编译器的时候,有些事情发生在我身上,让我有点困惑。
当你用 C/C + + 编写一个程序时,人们通常知道的是,编译器会神奇地把你的 C/C + + 代码变成机器的本机代码。
但是有些事情说不通。如果我以 x86架构为目标编译我的 C/C + + 程序,那么似乎相同的程序应该在具有相同架构的任何计算机上运行。但那不会发生。您需要为 OS X、 Linux 或 Windows 重新编译代码。(32位 VS 64位)
我只是好奇为什么会这样?在编译 C/C + + 程序时,我们不是以 CPU 体系结构/指令集为目标吗?Mac 操作系统和 Windows 操作系统可以在完全相同的架构上运行。
(我知道 Java 和类似的目标 VM 或 CLR,所以这些不算)
如果我对此给出一个最好的答案,我会说 C/C + + 必须编译成特定于操作系统的指令。但我读到的每个资料都说编译器的目标是机器。所以我很困惑。