Keil C51
中的优化级别及优化作用
级别说明
0
常数合并:编译器预先计算结果,尽可能用常数代替表达式。
包括运行地址计算。优化简单访问:编译器优化访问
8051
系统的内部数据和
位地址。跳转优化:编译器总是扩展跳转到最终目标,多级跳转指令被删除。
1
死代码删除:没用的代码段被删除。拒绝跳转:严密的检查条件跳转,以
确定是否可以倒置测试逻辑来改进或删除。
2
数据覆盖:适合静态覆盖的数据和位段被确定,并内部标识。
BL51
连接
/
定位器可以通
过全局数据流分,选择可被覆盖的段。
3
窥孔优化:清除多余的
MOV
指令。这包括不必要的从存储区加载和常数
加载操作。当存
储空间或执行时间可节省时,用简单操作代替复杂操作。
4
寄存器变量:如有可能,自动变量和函数参数分配到寄存器上。为这些变
量保留的存储区就省略了。优化扩展访问:
IDATA
、
XDATA
、
PDATA
和
CODE
的变量直接包含在操作中。在多数时间没
必要使用中间寄存器。局部公共子表达式删除:如果用一个表达式重复进行
相同的计算,则保存第一次计算
结果,后面有可能就用这结果。多余的计算就被删除。
Case/Switch
优化:包
含
SWITCH
和
CASE
的代码优化为跳转表或跳转队列。
5
全局公共子表达式删除:一个函数内相同的子表达式有可能就只计算一次。
中间结果
保存在寄存器中,在一个新的计算中使用。简单循环优化:用一个常数填充
存储区的循环程序被修改和优化。