嵌入式系统 编程技巧之:
加快程序运行速度的写法
影响程序运行速度的因素:
1) 算法:同样的计算结果,不同的算法,速度差距很大;
2) 写法:巧妙的写法,也可以加快运行速度,特别是遇到大循环的时候;
一个程序的运行速度提高,需在平时就采成良好的代码编写习惯,每个地方“一点点”,累积起来才见分晓。
1) 计算:
计算机计算方法中,最快的:++,-- , << , >> & | ^ ~
第二级: + - *
第三级: /
第四级: 三角,开方等
有以下优化写法:
a) X = y / a/b/c 应写为: x = y / (abc)
b) 整数乘除2的指数时,应采用:<< , >>
优化成:x >>=n ; x<<=n;
c) 取二进制的余,x = y%16 , 优化为:x = Y&0x0f;
d) x = x +1 ; 应优化成:x++,x–
x++ : 在很多CPU中,仅 1T
x= x +1 ; 可能需要 3 T
e) 若程序中存在 除以某个不变数(比如:某个设定的参数,设定之后大量引用),应将这个参数取倒数,改除为乘;
如: 若程序中需频繁地 / z ,则应优化:
对于不变的常数: #define Z 1/z
在某个过程中不会变的,则先: Z = 1/z
在程序中,改成 x = y*Z;
2) 充分利用逻辑运算 0或1 的结果:
If( x > y )
{
Z = y *2;
}
优化成: z = y<<(x>y);
同理: m += (X>Y);
A.0 = (X>Y)
A.0 |= (X>Y)
CPU运算速度对分支很敏感,这样就避免了分支,大大加快。
3) 充分利用指针寻址:
主要面对数组的同一元素多次引用时,应采取指针法
如: A(i).n =
A(i).m =
………
同一个A(i)多次此用
应优化为:
pA = &A(i);
pA->n =
pA->m =
此用量越大,效果越明显;
4) 在一个逻辑条件语句中常数项永远在左侧。
错误:if( 1 == x ) // 优点:不容易笔误,但相对慢
正确:if( x == 1 ) // 容易笔误成 x = 1 , 特别是初学者
理由:绝大多数CPU都有直接与常数操作的指令
-
确保声明和定义是静态的,除非您希望从不同的文件中调用该函数。
在同一文件函数对其他函数可见,才称之为静态函数。它限制其他访问内部函数,如果我们希望从外界隐藏该函数。现在我们并不需要为内部函数创建头文件,其他看不到该函数。静态声明一个函数的优点包括:
(1)两个或两个以上具有相同名称的静态函数,可用于在不同的文件。
(2)编译消耗减少,因为没有外部符号处理。 -
尽量使用与CPU位宽相同的数据类型
如:32位机,尽量使用32位的数据,也有些“伪32位”的CPU,如:TI的C2000系统,期数据基本位宽是16位。
7)、内存对齐
减小内存消耗,加快寻址速度,以32位机为例
struct
{ int16 A;
Float32 C;
Int16 B;
}ABC;
内存中的占用为:
A:16/32
C: 32
B: 16/32
共:3个32位空间
应优化为:
struct
{