C++编译器如何知道正在使用哪种CPU架构

use*_*322 4 c++ assembly

参考:http://www.cplusplus.com/articles/2v07M4Gy/

在编译阶段,

此阶段将程序转换为低级汇编级代码.编译器获取预处理文件(没有任何指令)并生成包含程序集级别代码的目标文件.现在,创建的目标文件是二进制形式.在创建的目标文件中,每行描述一个低级机器级指令.

现在,如果我是正确的,那么不同的CPU架构适用于不同的汇编语言/语法.

我的问题是编译器如何知道源代码必须改变哪种汇编语言语法?换句话说,C++编译器如何知道它正在处理的机器中有哪些CPU架构?

汇编程序是否使用CPU架构为不同的CPU架构生成汇编代码?

NS:我是初学者!

Lun*_*din 9

每个编译器都需要"移植"到给定系统.对于每个支持的系统,"编译器端口"需要由深入了解系统的人编程.


4rz*_*ael 5

警告:这是极其简化的

简而言之,编译器包含三个主要部分:

  • “前端”:这部分读取语言(在本例中为 c++)并将其转换为某种特定于编译器的伪代码。(抽象句法树,或 AST)

  • “优化器/中端”:这部分采用 AST 并进行非依赖于架构的优化。

  • “后端”:这部分采用 AST,并将其转换为二进制可执行代码,特定于您要在其上编译语言的体系结构。

例如,当您为您的平台下载 c++ 编译器时,实际上,您下载的是带有 linux-amd64 后端的 c++ 前端。

这种编码架构非常有用,因为它允许将编译器移植到另一种架构,而无需重写整个解析/优化的东西。它还允许某人创建另一个优化器,甚至另一个支持完全不同语言的前端,并且只要它输出正确的 AST,它将与为此编译器编写的每个后端兼容。