1、善用位运算
乘除运算相比加减运算需要更过的cpu时间,所以可以使用位运算进行计算优化。
(1)对于一个整数m乘以2^n的情况,使用位运算m << n。
(2)对于一个整数m除以2^n的情况,使用位运算m >> n。
(3)对于一个整数m对2^n求余数的情况,使用位运算m & (2^n - 1),实际使用当中,也许除数不是2的幂次方,如果想提高计算速度,可以把除数向上改成2的幂次方。
其他的情况很多很多,读者可以多留心观察,还比如使用bitmap,bitmap也算是一种位运算。
对于无法进行优化计算的场景,可以考虑使用数组做成table,代码计算时直接查找table即可,定义table数组时,可以加上const进行修饰变量,让数据和代码段一起紧挨保存,减少CPU中RAM内存的消耗。
2、尽量使用局部指针访问外部变量
将外部变量的地址存到函数自己的栈当中,然后通过这个栈内的指针去访问这个外部变量。
3、减少函数调用层次和嵌套深度
可使用inline内联或define,不过inline要考虑内存和指令缓存,适用于经常被调用的不大的函数。
4、循环内部的处理代码越少越好
如while和for循环,及时使用continue继续下一次循环或者break语句终止循环。
5、内存对齐
当数据结构很大的时候,把经常用到的成员放到结构体的最前面,当然,定义结构体时多考虑内存对齐,可以减少代码内存消耗,不过这可能会牺牲一些代码的可读性。
6、尽量少使用Linux的系统调用
因为用户态和内核态切换需要时间,举一个例子就可以说明,POSIX信号量实现时将文件映射到了进程的地址空间中,并且没有使用系统调用来操作各自的信号量,所以才使得在linux系统中相比XSI信号量提高了很多倍的性能。
可参考文章:(65条消息) linux下的系统调用全过程_一码当先-CSDN博客_linux系统调用
7、if条件语句概率性最大的条件放在最前面以及尽量减少if else嵌套深度
如 if (a > 0 || b > 0)... else ...,a > 0概率更大,更多时候只需要判断a>0即可。