编译器如何知道我的CPU指令集?

Onl*_*ons 4 c c++ compiler-construction linker loader

我读过这个

编译器将以人类可读编程语言编写的代码转换为处理器可理解的机器代码表示.

编译器如何知道我的CPU指令集?

任何理解汇编程序,链接器和加载器的工作的参考都会有所帮助.

Emp*_*ian 6

编译器如何知道我的CPU指令集?

大多数编译器只知道如何为特定CPU(或少数CPU)发出代码.每个目标CPU都要求有人为它编写编译器后端,并且该任务非常重要.

GCC支持各种各样的目标,但即使GCC也只能为少数目标发布代码.换句话说,您可以构建GCC以发出代码x86_64i*86处理器,并且您可以构建另一个副本来发出代码PowerPC,但是您无法构建一个将为所有三个代码生成代码的GCC.

任何参考,以了解汇编程序,链接器和加载器的工作

谷歌搜索上述条款使我在这里.


Jac*_*man 5

实质上,每个硬件/软件组合都需要自己的编译器.因此,即使您可能编写C代码以便在Windows机器上编译和运行,但与Apple机器的C编译器相比,您仍然需要一个与其他实现不同的编译器.

简而言之,有些编译器可以生成与运行硬件代码不同的硬件代码.一个简单的例子是Arduino产品.Arduino IDE在Windows(和其他)机器上运行,但代码是为Arduino板上的Atmel微处理器编译的.此外,每种电路板样式(UNO等)都有不同风格的Atmel微处理器,这就是为什么在IDE中你必须确定草图的目标,以便编译器可以进行必要的调整以运行特定的硬件(指令集).

这个想法也适用于汇编程序和链接器(可能稍微少一些).