C Complier 在嵌入上使用的时候,尽量都是CodeSize 最小,那么在这样的前提下,如何将code size 最小,这是一个编译器优化中比较常见的问题,但是同时如何保证程序的效率,这两者之中难免出现冲突,存在这样的矛盾问题,首先你要了解目前你自己的C complier 编译出来的程序是要运行效率高,还是Codesize最小,这两者似乎没有办法协调。
当然这篇文章主要在code size 优化上,而且接着前一篇继续说明peephole内部的算法如何。
1.首先使用Visual parser 将自己ASM code,进行解析,或者自己写解析器,收集每一行指令的信息,将其放入一个表中,表中的每一行都是一条ASM 指令的信息(Instrution table)。
2.合并基本块(Basic block)
因为c complier产生的ASM code 中间经常要产生一些没有实际作用的label, 其实这些label是Debugger 等其他组件使用的,但不会影响程序的执行流程。因此我们要将这些没有实际作用的label,剔除掉,因为peephole 所聚焦的是一个basic block.
Basic Block : 是指在局部范围内,程序的片断只有一个入口和一个出口,这样的代码片断就构成一个基本块。
首先程序中有很多的label, 这些label 之间可能是basic block, 也可能不是,当是一个basic block 的时候,还要看能不能和周围的basic block 构成一个更大basic block.<
Peephole 优化实做介绍
最新推荐文章于 2023-08-13 12:37:50 发布
本文探讨了在嵌入式系统中,如何通过Peephole优化来减小C编译器生成的代码大小,同时保持程序效率。首先,通过解析ASM代码构建指令表,然后合并基本块以剔除非必要标签。接着,应用特定算法处理指令表,生成删除或修改指令的Erase表。最后,依据Erase表生成优化后的指令代码。
摘要由CSDN通过智能技术生成