概述
编译原理的窥孔优化(Peephole Optimization) 是一种基于目标代理或低级中间表示(LIR) 的局部优化技术
它通过在代码中设置一个固定大小的窗口(窥孔),检查窗口内的指令序列,寻找可以优化的机会。窥孔优化主要针对的是哪些不需要全局信息就能处理的简单情况
作用
提高执行效率:通过删除冗余指令、合并指令等手段、减少执行时间
减少代码大小:删除不必要的指令,减少程序的大小,从而降低内存占用
改善指令流水线:指令优化顺序、减少执行延迟,提高CPU流水线的执行效率
例子
str r0, [sp, #4] ; 把r0的值保存到栈顶+4的位置
ldr r0, [sp, #4] ; 把栈顶+4位置的值加载到r0寄存器
在这两条指令中,第一条指令将数据保存到栈中,而第二条指令立即又将同样的数据加载回同一个寄存器
这是一个明显的冗余操作,窥孔优化可以将其简化为
; 优化后的代码,删除了冗余的加载指令
str r0, [sp, #4] ; 把r0的值保存到栈顶+4的位置
; ldr r0, [sp, #4] ; 冗余的加载指令被删除
由于优化后的代码省去了一个不必要的加载操作,因此可以减少执行时间,同时减少了代码的大小