这更像是一个理论问题.我是计算机科学专业的学生,对低级编程非常感兴趣.我喜欢了解引擎盖下的工作原理.我的专业是编译器设计.
无论如何,当我在我的第一个编译器上工作时,我正在发生一些让我感到困惑的事情.
当你用C/C++编写程序时,人们知道的传统事情是,编译器会神奇地将你的C/C++代码转换成该机器的本机代码.
但这里有些东西说不通.如果我针对x86体系 struct 编译我的C/C++程序,似乎相同的程序应该在任何具有相同体系 struct 的计算机上运行.但那不会发生.你需要在OSX、Linux或Windows上重新编译你的代码.(32位VS 64位也需要重新编译.)
我只是想知道为什么会这样?在编译C/C++程序时,我们不是以CPU体系 struct /指令集为目标吗?Mac操作系统和Windows操作系统在很大程度上可以运行在相同的架构上.
(我知道Java和类似的目标是VM或CLR,所以这些不算)
如果我能给出一个最好的答案,我会说C/C++必须编译成特定于操作系统的指令.但我读到的每一条消息都说编译器的目标是机器.所以我很困惑.