Linux程序设计的一些优化措施

系统 Linux
Linux程序设计的一些优化措施是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里。

[[201669]]

这些知识是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里

全局变量VS函数参数

全局变量在Linux下的驱动编程里边,用的是非常多,例如中断服务函数ISR,基本上都可以用全局变量来作为数据的更新,及事件的触发。给函数传递参数的效率一般来说,要低于直接使用全局变量,尤其是参数的数目太多的时候。参数传递,是需要先将参数push到stack中,等程序运行完毕,再从stack中pull出来,过程上要比global variable复杂。但是,全局变量过多的话,这里边就设计到管理的问题了,到后面就很难去控制这些变量的修改,这对于函数的模块化有不利的影响。

  1. i=i+1; 
  2.  
  3. i++; 
  4.  
  5. i--; 

 

这三个语句都通常引用在for()或者是while()里边,从执行效率上来说 3》2》1

这和最终生成的汇编语言有关,一般来说,影响不会太夸张。

switch-case语句

switch-case语句,也是用的非常多的语句。

这里首先的优化原则就是:将发生概率***的条件,放在***判断的位置。这样就能够有效的降低比较的次数,达到更优的效果。或者,有一种更好的方法来替代switch-case语句的方法,就是利用查表

比如

  1. switch(msg_type) 
  2. case DATA: 
  3.       handle_data_fun(); 
  4.       break; 
  5. case RTS: 
  6.       handle_rts_fun(); 
  7.       break;  
  8.       ....... 
  9. }  

 

这里就可以用函数指针和查表的方式,获得handle_fun的方法来替代。

处理函数都在初始化的过程中,放到*handle_fun[MAX]相应的位置上

  1. int (*handle_fun[MAX])(struct msg_t *msg); 
  2.  
  3. int msg_type = msg->type; 
  4.  
  5. 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中文站
相关推荐

2010-03-16 09:15:20

2011-07-13 09:13:56

Android设计

2011-05-23 18:06:24

站内优化SEO

2019-08-16 09:40:22

混合云数据安全技术

2019-08-19 14:56:07

设计模式javascript

2012-06-07 10:17:55

软件设计设计原则Java

2009-09-27 11:09:42

API设计

2019-09-17 09:21:01

2009-11-26 10:32:57

PHP代码优化

2021-06-10 10:02:19

优化缓存性能

2018-06-14 09:35:35

2021-05-21 11:20:36

Linux命令文件

2009-06-23 18:13:21

2009-06-23 17:52:04

Linux程序设计

2022-02-27 10:13:42

分包Uiniapp项目

2011-09-19 10:15:10

移动界面设计

2011-07-13 10:12:56

SQL语句优化操作符优化

2011-06-16 20:35:34

SEO

2017-04-08 17:12:36

设计模式抽象策略模式

2011-07-05 15:22:04

程序设计
点赞
收藏

51CTO技术栈公众号