参考:http://www.cplusplus.com/articles/2v07M4Gy/
在编译阶段,
此阶段将程序转换为低级汇编级代码.编译器获取预处理文件(没有任何指令)并生成包含程序集级别代码的目标文件.现在,创建的目标文件是二进制形式.在创建的目标文件中,每行描述一个低级机器级指令.
现在,如果我是正确的,那么不同的CPU架构适用于不同的汇编语言/语法.
我的问题是编译器如何知道源代码必须改变哪种汇编语言语法?换句话说,C++编译器如何知道它正在处理的机器中有哪些CPU架构?
汇编程序是否使用CPU架构为不同的CPU架构生成汇编代码?
NS:我是初学者!
简而言之,编译器包含三个主要部分:
“前端”:这部分读取语言(在本例中为 c++)并将其转换为某种特定于编译器的伪代码。(抽象句法树,或 AST)
“优化器/中端”:这部分采用 AST 并进行非依赖于架构的优化。
“后端”:这部分采用 AST,并将其转换为二进制可执行代码,特定于您要在其上编译语言的体系结构。
例如,当您为您的平台下载 c++ 编译器时,实际上,您下载的是带有 linux-amd64 后端的 c++ 前端。
这种编码架构非常有用,因为它允许将编译器移植到另一种架构,而无需重写整个解析/优化的东西。它还允许某人创建另一个优化器,甚至另一个支持完全不同语言的前端,并且只要它输出正确的 AST,它将与为此编译器编写的每个后端兼容。
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |