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语句。

Linux 程序设计的一些优化措施的更多相关文章

  1. 7)Linux程序设计入门--网络编程

    )Linux程序设计入门--网络编程 Linux系统的一个主要特点是他的网络功能非常强大.随着网络的日益普及,基于网络的 应用也将越来越多. 在这个网络时代,掌握了Linux的网络编程技术,将令每一个 ...

  2. (转)CentOS(5.8/6.4)linux生产环境若干优化实战

    CentOS(5.8/6.4)linux生产环境若干优化实战 原文:http://blog.51cto.com/oldboy/1336488 特别说明:本文来自老男孩linux培训VIP学生学习笔记. ...

  3. Linux学习之六-Linux系统的基础优化

    Linux系统的基础优化 何谓'优化'.顾名思义,优化就是采取某些措施使某个东西或者某事物变得更加优异,出色.对于Linux而言,在初期安装好系统之后,也需要对其进行一定的基础优化,可分为安全上的优化 ...

  4. Linux硬件IO的优化简介

    Linux硬件IO的优化简介 首先简单介绍下有哪些硬件设备如下(由于硬件种类厂家等各种因素我就不在此多做介绍有兴趣的可以自行学习): 1.CPU:中央处理器,是计算机运算控制的核心部件之一,相当于人的 ...

  5. Linux程序设计(一)入门

    1. linux程序 Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件. 可执行文件:是计算可以直接运行的程序,相当于windows的.exe文件. 脚本文件:一组指令的集合.这些指令 ...

  6. mysql的优化措施,从sql优化做起

    http://geeksblog.cc/2016/06/11/mysql-optimize/ 优化sql的一般步骤 通过show status了解各种sql的执行频率 定位执行效率低的sql语句 通过 ...

  7. ubuntu nginx安装及相关linux性能參数优化

    一.安装 下载源代码,解压:tar -xzvf nginx-1.4.7.tar.gz ./configure make && make install 改动默认nginx的监听port ...

  8. 【原创】构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化措施

    原文:[原创]构建高性能ASP.NET站点 第六章-性能瓶颈诊断与初步调优(下前篇)-简单的优化措施 构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化措施 前言:本篇 ...

  9. Linux内核网络协议栈优化总纲

    本文原创为freas_1990  转载请标明出处:http://blog.csdn.net/freas_1990/article/details/9474121 Jack:淫龙,Linux内核协议栈如 ...

随机推荐

  1. pyqt下拉菜单和打开指定的内容(或者exe,doc,ppt,url等内容)

    #下拉菜单及显示 def _action(self): menu=QMenu(self) menu1=menu.addMenu(u'文件') menu11=menu1.addAction(u'新建任务 ...

  2. Laravel-高级篇-Artisan

    (慕课网_轻松学会Laravel-高级篇_天秤vs永恒老师_http://www.imooc.com/learn/702) 一.概述 Artisan是Laravel中自带的命令行工具的名称 由强大的S ...

  3. DEV SIT UAT

    DEV环境:DEV顾名思义就是develop,即代码开发的环境.SIT环境:System Integration Test系统集成测试,开发人员自己测试流程是否走通.UAT环境:User Accept ...

  4. C#中唯一标识符GUID的一些知识点

    概念 GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算 ...

  5. win7 安装vs2010报错 Error code -939523550 for this component is not recognizedHi

    When i try to install VS2010, Its not installing. I'm getting an error.  It just try to install the ...

  6. IOS 代码管理工具

    代码管理工具国内主要用的是SVN 国外主要是Git

  7. IOS 错误集合以及解决办法(持续整理中)

    1 . 如下错误: app:resource fork, Finder information, or similar detritus not al site:forums.developer.ap ...

  8. linus用的是哪个桌面?

  9. DataSource

    数据库连接池原理:在内存中开辟一段存储空间用来存储多个Connection连接,避免频繁的创建Connection,从而提高效率.代码如下: package jcbc.ds.test1; import ...

  10. 给EcStore商城会员添加推广返利功能

    EcStore商城后台应用中心安装“网站推广”应用,会员成为推广员有二种途径:一是后台/推广设置/推广员审核/推广注册模式设为:需注册后审核成为推广员 此模式下前台会员在使用推广前,需要在会员中心申请 ...