这些常识是在平常的浏览中,零碎的获得的,本身总结了一下,分享在这里
全局变量VS函数参数
- 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语句。
【编辑推荐】
- 开辟一个Linux调试器(六):源码级慢慢履行
- Linux敕令行获取公网IP
- Linux根本防火墙设置和开放端口敕令
- 在Linux中瓜分和重组文件
- Linux Shell脚本履行超时怎么办?
全局变量在Linux下的驱动编程里边,用的是异常多,例如中断办事函数ISR,根本上都可以用全局变量来作为数据的更新,及事宜的触发。给函数传递参数的效力一般来说,要低于直接应用全局变量,尤其是参数的数量太多的时刻。参数传递,是须要先将参数push到stack中,等法度榜样运行完毕,再大年夜stack中pull出来,过程上要比global variable复杂。然则,全局变量过多的话,这里边就设计到治理的问题了,到后面就很难去控制这些变量的修改,这对于函数的模块化有晦气的影响。
推荐阅读
Win7存在巨大安全隐患? 升级最新Win10真能确保安全?
自微软宣布Win10正式版体系以来, 对于要不要应用,有一部分人一向是不雅望状况,并没有迫在眉睫的安装新体系。不得不说,Win7是绝对经典,尤其是很多游戏玩家的最爱。今天,一则“>>>详细阅读
本文标题:Linux程序设计的一些优化措施
地址:http://www.17bianji.com/lsqh/37038.html
1/2 1