首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM程序设计优化策略与技术 大小端模式(5)

ARM程序设计优化策略与技术 大小端模式(5)

C循环结构
◎ 使用减数到零的循环体,以节省指令和寄存器的使用。
◎ 使用无符号的循环计数值,并用条件 i != 0中止。
◎ 如果循环体至少执行一次,用优先选用do-while。
◎ 适当情况下展开循环体。
◎ 尽量使用数组的大小是4或8的倍数,用此倍数展开循环体
寄存器分配
◎ 尽量限制函数内部循环所用局部变量的数目,最多不超过12个,以便编译器能把变量分配到寄存器。
◎ 可以引导编译器,通过查看是否属于最内层循环的便赖宁嘎来去定某个变量的重要性。
函数调用
ARM中的函数前4个整型参数通过寄存器r0、r1、r2、r3来传递,随后的整型参数通过堆栈来传递。(full descedingstack)。
◎ 尽量限制函数参数,不要超过四个,也可以把相关的参数组织在结构体传递。
◎ 把比较小的被调用函数和调用函数放在同一个源文件中,并且限定一,后调用,编译器能进行优化。
◎ 用_inline内联性能影响较大的重要函数。
指针别名
◎ 用一个局部变量来保存公共子表达式的值,保证该表达式只求一次值。
◎ 避免使用局部变量的地址,否则访问这个变量的效率较低。
结构体的安排
◎ 小的元素放在结构体的开始,大的元素放在结构体的最后
◎ 避免使用过大的结构体,用层次话的小结构体代替。
◎ 人工对API的结构体增加填充位以提高移植性。
◎ 枚举类型要慎用,因为它的大小与编译器相关。
位域
◎ 尽量用define或者enum来代替位域
◎ 用逻辑运算来丢位域操作
边界不对齐数据和字节排列方式
◎ 尽量避免使用边界不对齐数据;
◎ 用char× 可指向任意字节对齐的的数据,与逻辑运算配合,可访问任意边界和排列的数据。
除法
◎ 一堆算法,不好写,总的来说是以乘代除,配合移位运算。
内联函数和内嵌汇编
◎ 没什么好写的,就是内联减少调用开销,内嵌汇编提高运行效率。

大端模式  所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;  例子:  0000430:e684 6c4e 0100 1800 53ef 0100 0100 0000  0000440:b484 6c4e 004e ed00 0000 0000 0100 0000  在大端模式下,前16位应该这样读:e684  记忆方法:地址的增长顺序与值的增长顺序相反小端模式  所谓的小端模式,是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。  例子:  0000430:e684 6c4e 0100 1800 53ef 0100 0100 0000  0000440:b484 6c4e 004e ed00 0000 0000 0100 0000  在小端模式下,前16位应该这样读:84e6  记忆方法:地址的增长顺序与值的增长顺序相同
继承事业,薪火相传
返回列表