欢迎访问智唯网络!专业H5响应式营销型网站建设、百度seo优化、网络推广服务!
营销之道 干货分享
了解企业新动态,分享前沿的营销推广干货,成长路上,我们携手同行
网站建设News

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

发布时间:2017:09:02 13:07:39 | 已阅: | 作者:智唯小编 | 来源:智唯网络 | 共 0 条评论

扫一扫
手机访问

本文共有930个文字,预计阅读时间3分钟
导语
这些知识是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里。

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

  全局变量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语句。

如何建站:
建网站需要准备哪些资料 如何购买域名空间 协助备案 成功案例 真实见证 建站类型有哪些 收费标准 建站流程 制作周期 改版美化 提升有户体验 [建站必看]源码内容交付 联系客服 专业建站

看了这篇文章的人还看了

专业建站 免费排名(有什么疑问的请留言或咨询在线客服)
  • 全部评论(0
    还没有评论,快来抢沙发吧!

上一篇:学会链接分析,快速定位网站问题

下一篇:用户体验之是什么原因让用户离开您的网站?

  • 同行价格

    统一报价,无隐形消费

  • 金牌服务

    一对一专属顾问,7*24小时金牌服务

  • 售后无忧

    完善售后,客服经理全程跟进

建站优化二维码
建站优化二维码

截屏,微信识别二维码

微信号:13825575516

(点击微信号复制,添加好友)

优化二维码打开微信