通用的优化方法
(1)减小运算强度
利用左/ 右移位操作代替乘/ 除2 运算:通常需要乘以ARM或除以2 的幂次方都可以通过左移或右移n 位来完成。实际上乘以任何一个整数都可以用移位和加法来代替乘法。ARM 7 中加法和移位可以通过一条指令来完成,且执行时间少于乘法指令。例如: i = i × 5 可以用i = (i<<2) + i 来代替。
利用乘法代替乘方运算:ARM7 核中内建有32 ×8 ARM乘法器, 因此可以通过乘法运算来代替乘方运算以节约乘方函数调用的开销。例如: i = pow(i, 3.0) 可用 i = i×i × i 来代替。
利用与运算代替求余运算:有时可以通过用与(AND )指令代替求余操作(% )来提高效率。例如:i = i % 8 可以用 i = i & 0x07 来代替。
(2)优化循环终止ARM条件
在一个循环结构中,循环的终止条件将严重影响着循环的效率,再加上ARM 指令的条件执行特性,所以在书写循环的终止条件时应尽量使用count-down-to-zero结构。这样编译器可以用一条BNE (若非零则跳转)指令代替CMP (比较)和BLE (若小于则跳转)两条指令,既减小代码尺寸,又加快了运行ARM速度。
(3)使用inline 函数
ARM C 支持 inline 关键字,如果一个函数被设计ARM成一个inline 函数,那么在调用它的地方将会用函数体来替代函数调用语句, 这样将会彻底省去函数调用的开销。使用inline 的最大缺点是函数在被频繁调用时,代码量将增大。 |