猿代码 — 科研/AI模型/高性能计算
0

GCC 体系结构概述。表达式的编译。

摘要: 本节基于红帽杂志的一篇文章。GNU 编译器集合 (GCC) 包含许多用于不同编程语言的编译器。主 GCC 可执行文件gcc处理用 C、C++、Objective-C、Objective-C++、Java、Fortran 或 Ada 编写的源文件,并为每个源文件生 ...

本节基于红帽杂志的一篇文章 [1]。

GNU 编译器集合 (GCC) 包含许多用于不同编程语言的编译器。主 GCC 可执行文件 gcc 处理用 C、C++、Objective-C、Objective-C++、Java、Fortran 或 Ada 编写的源文件,并为每个源文件生成一个汇编文件。它是一个驱动程序,根据源文件的语言调用适当的编译程序。对于 C 源文件,它们是预处理器和编译器 cc1、汇编器 as 和链接器 collect2。第一个和第三个程序带有 GCC 发行版;汇编程序是 GNU binutils 软件包的一部分。本书介绍了预处理器和编译器 cc1 的内部结构。

每个编译器都包含三个组件:前端、中间端和后端。GCC 一次编译一个文件。源文件一个接一个地遍历所有三个组件。当它从一个组件转到下一个组件时,它的表示形式会被修改。图 1 说明了组件以及与每个组件关联的源文件表示形式。抽象语法树 (AST)、寄存器传输语言 (RTL) 和对象是主要表示形式。


主要表现形式[编辑源代码]

前端的目的是读取源文件,对其进行分析,并将其转换为标准抽象语法树 (AST) 表示形式。AST 是一种双重类型表示形式:它是一个节点可以有子节点的树,以及一个节点一个接一个地链接的语句列表。每种编程语言都有一个前端。

然后,AST 用于生成寄存器传输语言 (RTL) 树。RTL 是一种基于硬件的表示形式,对应于具有无限数量寄存器的抽象目标架构。RTL 优化阶段以 RTL 形式优化树。最后,GCC 后端使用 RTL 表示形式为目标体系结构生成汇编代码。后端的示例包括 x86 后端和 MIPS 后端。

在接下来的章节中,我们将介绍 C 前端和 x86 后端的内部结构。编译器从其初始化和命令行选项处理开始。之后,C 前端对源文件进行预处理、解析并执行一些优化。然后,后端为目标平台生成程序集代码并将其保存到文件中。





说点什么...

已有0条评论

最新评论...

本文作者
2024-2-14 01:46
  • 0
    粉丝
  • 256
    阅读
  • 0
    回复
资讯幻灯片
热门评论
热门专题
排行榜
Copyright   ©2015-2023   猿代码-超算人才智造局 高性能计算|并行计算|人工智能      ( 京ICP备2021026424号-2 )