2024-04-19 02:01:09
C语言7种提高效率超赞方法
1、位运算替代乘除
位运算是C语言中的最小数据单元,移位运算或位处理基本上是每个MCU或者处理器的指令集中直接支持的,所以C代码编译成汇编以后基本上简单的几条汇编指令即可完成运算。
然而对干乘除法CPU一般无法直接运行,当然现在高端的芯片一般支持FPU等等之类的处理,相对而言速度得到了显著提升:但是大部分还是会比移位运算处理耗时,特别是有些编译器直接把乘除法编译成函数调用来处理。
所以像n/8这样的处理直接使用n>>3即可替代,这样效率会更高。
2、变量的使用
使用全局变量相对局部变量效率更高,函数的局部变量一般处于函数内部,在调用过程中存在入栈与出栈的情况,这样就增加了函数调用的耗时,而全局变量直接访问效率更高。
当然全局变量是程序中要非常小心使用的,滥用全局变量的行为确实会增加系统各模块之间的耦合,所以在程序中要规范全局的统一接口使用。
同时对干变量类型的使用也是大家需要注意的,数据类型不是越大越好,比如uint64_t的处理汇编生成代码就相对比较多,执行效率一般比短数据类型要低,尽量选择芯片相同位数的数据类型处理,当然大部分更小的数据长度也是合适的。
3、指针替代数组
相对数组索引,指针运算效率更快,数组是一片连续的内存空间,那么通过指针移动进行数组数据的索引也是合适的。
比如我们遍历数组array[i],任意一次的循环都需要对其进行下标 “i” 值的标记与计算,而当指针“p”位于array数组位置的时候,循环仅只需要对“p”进行增量的操作,这样指针耗时会比数组访问小很多。
4、算法优化
一些数据的处理明明可以通过更加简洁的算法,可是大部分程序员非要以最傻瓜的方式进行运算,最容易理解的就是高斯求和,1~100累加,还是选择高斯求和算法,当然还有很多算法有多种形式,各有优劣,根据自身需求进行合理选择。特别是一些应用根本没有必要用使用高精度耗时的数据处理算法,选择一些低精度快速的算法更加合适。
5、优化分支语句
我们都知道if-else语句是最常用的分支语句,其特点就是逐一判断,既然是判断就会消耗时间,然而对干一些处理并不是每个分支都是均匀执行的,如果你把频繁执行的相应分支放到后面,势必就需要执行较多前面的逐一判断,从而降低代码执行效率。所以我们要对各个分支的执行频率进行评估,把最有可能执行的放在判断语句前面执行。同样对干分支语句多级嵌套的情况,我们需要把频率性对较高的放到外层,频率低的放内层,这样减少不必要的外层判断。
6、循环语句的优化
在系统的多重循环过程中,需要程序员将最长的循环内容设置在系统的最内层,同时需要将最短的循环内容设置在系统的最外层。这样,能够有效提升CPU的运行效率,减少循环次数。另外,如果在系统的循环过程中需要进行逻辑判断,且循环的次数相对较大,就需要将循环判断从系统内部转移到系统的外部。
7、无敌”宏 "的利用
宏在C语言中是灵活度非常高的语法特性,宏代码片段的使用其代码表现形式上与函数差异并不是很大,大伙有学习C++语言模板的经验,应该会觉得两者有颇多相似之处。
在对函数进行调用的过程中,需要通过栈对其进行储存,而且CPU在函数调用的过程中还要做好对数据的恢复准备,有效进行出栈和进栈的操作。所以占用CPU时间除了代码本身之外,对函数进行调用也需要占据一定的时间。
而宏就能节省参数压栈、返回参数、C语言call调用以及执行return的操作步骤,从而提高程序的运行效率。