目标代码生成与代码优化
2013-12-29 10:49
155 查看
目标代码的生成与机器的硬件环境有关,所以有些语言不能跨平台的原因就在于编译时需要了解机器的寄存器等资源,不同的机器寄存器不同,导致代码需要二次编译。
java语言由于是半编译半解释的语言,之所以能跨平台是因为在编译的阶段只生成java虚拟机能识别的中间代码,而不是目标代码,再由Java虚拟机来解释成机器码。
目标代码的生成需要获取寄存器的个数和使用情况,这里需要用到寄存器选择算法。
为了使目标代码的执行效率更高,需要设置两个数据结构:待用信息,活跃信息。在基本模块之内,记录各个变量的使用情况,然后根据待用信息来确定是否将寄存器的数据替换或者保留。活跃信息是在模块之外确定数据否需要保留或者替换。
代码优化包括:代码外提,删除无用代码,删除公共子表达式等。
代码外提:主要在循环结构中使用,这样能成倍的提高代码的运行效率。
删除公共表达式: 对于相同的三地址代码可以进行合并,删除。
删除无用代码: 对于一些临时变量和没有使用的代码可以进行删除。
程序流图的画法:
DAG图代码优化方法:
java语言由于是半编译半解释的语言,之所以能跨平台是因为在编译的阶段只生成java虚拟机能识别的中间代码,而不是目标代码,再由Java虚拟机来解释成机器码。
目标代码的生成需要获取寄存器的个数和使用情况,这里需要用到寄存器选择算法。
为了使目标代码的执行效率更高,需要设置两个数据结构:待用信息,活跃信息。在基本模块之内,记录各个变量的使用情况,然后根据待用信息来确定是否将寄存器的数据替换或者保留。活跃信息是在模块之外确定数据否需要保留或者替换。
代码优化包括:代码外提,删除无用代码,删除公共子表达式等。
代码外提:主要在循环结构中使用,这样能成倍的提高代码的运行效率。
删除公共表达式: 对于相同的三地址代码可以进行合并,删除。
删除无用代码: 对于一些临时变量和没有使用的代码可以进行删除。
程序流图的画法:
DAG图代码优化方法:
相关文章推荐
- 编译器,优化,及目标代码生成.
- C编译器剖析_5.4.1 中间代码生成与优化_删除无用的临时变量和优化跳转目标
- 编译器,优化,及目标代码生成.
- 编译实验(三)目标代码生成
- 代码的优化过程: 生成括号 Generate Parentheses
- GCCE编译器优化,缩小目标程序代码
- HotSpot模板解释器目标代码生成过程源码分析
- 如何在VC中生成很小的exe目标代码
- 析构函数无法命中断点. 当前无法命中断点: 没有与此行关联的调试程序的目标代码类型的可执行代码. 可能的原因包括;条件编译, 编译器优化或者...
- C编译器剖析_5.2.3 中间代码生成及优化_通过“偏移”访问数组元素和结构体成员
- 中间代码生成中的优化
- C编译器剖析_5.2.4 中间代码生成及优化_后缀表达式的翻译
- C++标准给予优化权生成代码表示程序操作
- QNX生成目标程序优化减少程序体积
- C编译器剖析_5.2.5 中间代码生成及优化_赋值表达式的翻译
- 编译优化生成坏代码
- C编译器剖析_5.3.2 中间代码生成及优化_switch语句的翻译
- AB1601优化与生成代码大小
- C编译器剖析_5.1 中间代码生成及优化_简介
- 编译优化生成坏代码