通过一定的风格来编写C程序,可以帮助C编译器生成执行速度更快的ARM代码。
对性能有严格要求的应用, 经常会包含一些对系统性能起决定性作用的关键程序,
可参考以下几点进行优化:
1. 对局部变量、函数参数和返回值要使用signed和unsighed int类型。 这样可以避免类型转换, 而且可高效地使用ARM的32位数据操作指令。
2. 最高效的循环体形式是减计数到零(counts down to zero)的do-while循环。
3. 展开重要的循环来减小循环开销。
4. 不要依赖编译器来优化掉重复的存储器访问。 指针别名会阻止编译器的这种优化。
5. 尽可能把函数参数的个数限制在4个以内。 如果函数参数都存放在寄存器内,那么函数调用就会快得多。
6. 按元素尺寸从小到大排序的方法来安排结构体, 特别是在thumb模式下编译。
7. 不要使用位域, 可以用掩码和逻辑操作来替代。
8. 避免除法, 可以用倒数的乘法来替代。
9. 避免边界不对齐的数据。 如果数据有可能边界不对齐, 那么就要使用char *指针类型来访问。
10. 在C编译器钟使用内嵌汇编可以利用到C编译器本来不支持的指令或者优化。
高效的寄存器分配
1. 应该尽量限制函数内部循环所用局部变量的数目, 最多不超过12个, 这样, 编译器就可以把这些变量都分配给ARM寄存器。
2. 可以引导编译器, 通过查看是否属于最内层循环的变量来确定某个变量的重要性。
高效地调用函数
1. 尽量限制函数的参数, 不要超过4个, 这样函数调用的效率会更高。 也可以将几个相关的参数组织在一个结构体中, 用传递结构体指针来替代多个参数。
2. 把比较小的被调用函数和调用函数放在同一个源文件中,并且要先定义, 后调用, 编译器就可以优化函数调用或者内联较小的函数。
3. 对性能影响较大的重要函数可使用关键字_inline进行内联。