重温编译原理


今天重新读了一下编译原理这本电子书(PDF,可在优快云下载),觉得理解一下编译过程还是比较重要的,特别是第一章 概论 对编译过程的描述和第七章 运行时环境 的描述。
1 编译过程
1) 预处理
包括去除注释,宏替换,include文件
2) 词法分析
生成符号表
3) 语法分析
生成分析树,该树的叶子节点都是符号表中的符号(现在更趋向生成语法树,它取消了一些节点)
4) 语义分析
这时主要是指静态语义:包括声明和类型检查,生成注释树
5) 源代码优化
比如:常量合并(类似于4+2这种形式直接转换成6),生成中间代码
6) 代码生成
生成目标机器的代码。
7) 目标代码优化
还是目标代码
8) 连接
将不同文件的目标代码收集到一个可执行文件中,还连接目标程序和用于标准库函数的代码,以及连接目标程序和由计算机OS提供的资源。连接过程对OS和处理器有极大的依赖。

2 运行时环境
1)存储器组织
动态:寄存器和RAM的使用
静态:代码区,全局/静态数据区

小的整形值由编译器直接插入,大的整形值,浮点数,特别是串文字都是分配到全局/静态数据区的。

一种典型结构:
+------------------------------------+
|                  代码区域                    |
+------------------------------------+
|                全局/静态区域              |
+------------------------------------+
|                     栈                           |
+------------------------------------+
|                     自                           |
|                     由                           |
|                     区                           |
|                     域                           |
+------------------------------------+
|                     堆                           |
+------------------------------------+
 

但在More effective c++中对内存区的结构描述,注意它的全局区在堆下面:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值