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

被折叠的 条评论
为什么被折叠?



