最近正在读沈建华译的《ARM嵌入式系统开发—软件设计与优化》这本书,感觉这本书写的非常好,现在把书中关于C程序的优化部分的总结分享给大家,希望对从事ARM学习和开发的朋友有所帮助。
一、C数据类型的有效用法
1.对于存放在寄存器中的局部变量,除了8位或16位的算术模运算外,尽量不要使用char和short类型,而要使用有符号或者无符号int类型。除法运算时使用无符号数执行速度更快。
2. 对于存放在主存储器中的数组和全局变量,在满足数据大小的前提下,应尽可能使用小尺寸的数据类型,这样做可以节省存储空间。ARMv4体系结构可以有效地装载和存储所有宽度的数据,并可以使用递增数组指针来有效地访问数组。对于short类型的数组,要避免使用数组基地址的偏移量,因为LDRH指令不支持偏移寻址。如对一个short类型的数组a[n],加载数组时不要用a[i]的形式,而要用*(a ++)的形式。
3.通过读取数组或者全局变量并赋给不同类型的局部变量时,或者把局部变量写入不同类型的数组或者全局变量时,要进行显式的数据类型转换。这种转换是编译器可以明确、快速的处理,把存储器中数据宽度比较窄的数据类型扩展,并赋给寄存器中较宽的类型。
4.由于隐式或者显式的数据类型转换通常会有额外的指令周期开销,所以在表达式中应尽量避免使用。Load和Store指令一般不会产生额外的转换开销,因为load和store指令是自动完成数据类型转换的。
5.对于函数参数和返回值应尽量避免使用char和short类型。即使参数范围比较小,也应该使用int类型,以防止编译器做不必要的类型转换