您的位置 首页 知识

Linux程序设计的一些优化办法

Linux程序设计的一些优化措施-全局变量在Linux下的驱动编程里边,用的是非常多,例如中断服务函数ISR,基本上都可以用全局变量来作为数据的更新,及事件的触发。给函数传递参数的效率一般来说,要低于直接使用全局变量,尤其是参数的数目太多的时候。

Linux 程序规划的一些优化办法

这些常识是在往常的阅览中,零星的取得的,自己总结了一下,共享在这儿

全局变量VS函数参数

全局变量在Linux下的驱动编程里面,用的是十分多,例如中止服务函数ISR,基本上都能够用全局变量来作为数据的更新,及事情的触发。给函数传递参数的功率一般来说,要低于直接运用全局变量,尤其是参数的数目太多的时分。参数传递,是需求先将参数push到stack中,等程序运转结束,再从stack中pull出来,进程上要比global variable杂乱。可是,全局变量过多的话,这儿面就规划到办理的问题了,到后边就很难去操控这些变量的修正,这关于函数的模块化有晦气的影响。

i=i+1;
i++;
i–;
这三个句子都一般引用在for()或许是while()里面,从履行功率上来说 3》2》1
这和终究生成的汇编语言有关,一般来说,影响不会太夸大。

switch-case句子

switch-case句子,也是用的十分多的句子。
这儿首要的优化准则便是:将发生概率最高的条件,放在最早判别的方位。这样就能够有用的下降
比较的次数,到达更优的作用。或许,有一种更好的办法来代替switch-case句子的办法,便是运用查表
比方
switch(msg_type)
{
case DATA:
      handle_data_fun();
      break;
case RTS:
      handle_rts_fun();
      break; 
      …….
}  
这儿就能够用函数指针和查表的办法,取得handle_fun的办法来代替。

处理函数都在初始化的进程中,放到*handle_fun[MAX]相应的方位上
int (*handle_fun[MAX])(struct msg_t *msg);
int msg_type = msg->type;
handle_fun[msg_type](msg);//即可
这种办法,在Linux的网络协议里面,用的十分多,一般对应的查表办法为hash表结构。

sturct  和 union的运用

sturcut 运用,一定要考虑到字节对其的问题,struct中,不同的组织次序,sizeof是不同的所以要调整好方位,尽量确保struct的size最小。

union的运用,比方对不同包的数据结构上,是不一样的,所以尽量运用union来区别不同的包结构这样对程序的可读性比较好。

volatile的运用

这在驱动编程方面是十分有用的一个标志。意图是不让编译器compiler把当时的变量优化掉。尤其是涉及到硬件寄存器的值的时分。

乘除运算的简化

乘除运算,对arm来说太丧命,arm的乘除都生成一堆的汇编指令才干完结。所以一般能够通过位操作,比方移位,取低位来进行恰当的化简。比方 a*8 = a<<3;

Inline 函数
在完成比较简单功用的函数,以及那些调用十分普通的函数,都能够在函数前参加inline的标识。这样在发生汇编的时分,能够更有用。也能够代替较杂乱的define句子。

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/89603.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部