您的位置:首页 > 其它

重温编译原理

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

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

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: