欢迎来到天天文库
浏览记录
ID:59445767
大小:54.00 KB
页数:6页
时间:2020-05-24
《浅议C语言编程方法优化及应用.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、浅议C语言编程方法优化及应用中图分类号:TP315文献标识码:A文章编号:41-1413(2012)02-0000-01摘要:本文主要总结了如何在C语言编程设计过程中优化编程的方法,同时对有些方法进行举例应用分析。通过总结希望有利于编程过程中改善程序的结构、提高运行效率和可读性,充分发挥出C语言的优势。关键词:C语言编程优化应用一、前言C语言之所以能够成为一种高级编译型程序设计语言,是因为它有很多优点:便于结构化程序设计,库函数功能丰富,功能性和移植性强,运算速度快,编译效率高,可直接实现对系统硬件的操作等。另外,因为C语言还具有汇编语言的功能,能够很好地操作底层的硬件接口,完善的模块
2、化结构,而这正是软件开发的基本保障,因此它不仅大大缩短了周期,还增加了软件的可读性。尽管C语言有很多优点,但它也存在一个最大缺点,那就是占用资源较多。因此在用C语言编程是对其方法进行优化不仅可以节省资源,也更利于程序的可读性和效率的提高。二、C语言编程方法优化与应用举例(%1)数据和变量类型优化[1]数据类型选择标准C语言提供的数据类型包括整型、浮点、枚举、指针、结构等。编程需要考虑的是为了编译生成的代码小、效率高应该如何选择数据类型。对于整型而言,有signed和unsigned两种,分别称为char,shortint,int,longint,enumo然而ANSIC没有准确规定每种
3、类型的大小,这样就会影响程序在两个处理器之间的移植操作。为了避免这种影响,编程时最好是将数据类型按类型定义放在一个头文件中,当移植时只要简单的修改头文件即可:TMS320C54xTMS320C6000U8unsignedcharS8char/signedcharU16char/unsignedshort/unsignedintunsignedshortS16signedchar/short/intshortU32unsignedlongunsignedint优化定义变量的方法是置成寄存器变量。尽量避免传递一个变量地址给另一个函数。同时声明多个变量往往优于单独声明变量。如inta,b就会
4、比inta;intb更有效率。(二)优化算法和数据结构数据结构的选择要以满足系统硬件的要求作为前提来考虑。以51系列单片机为例,由于51系列是8位机,因此它只能直接处理8位无符号数的运算,而如果要处理其它类型的数据,必须通过额外的算法才可以实现。所以,要尽可能选用无符号的字符类型。在算法的优化上,用较快的二分查找、乱序查找法代替顺序查找法,用快速排序、合并排序或根排序代替插入排序(或冒泡排序法),都可以大大的提高程序的执行效率。(三)优化选择语句[2]1.嵌套if语句的使用。当if结构中要判断的并列条件较多的时候,最好将它们拆分成多个if语句结构,然后嵌套在一起,就可以减少不必要的判断
5、。2.嵌套switch语句的使用。switch语句中的case很多时,为了减少比较次数,可把大switch语句转化为嵌套switch语句。把频率较高的case标号放在一个switch语句中,而发生频率较低的case标号则放在另一个switch语句当中。3.给switch语句中case排序。Switch通常可以使用跳转表或者比较链/树转化成多种算法的代码。当switch用比较链转化时,编译器会产生if-else-if嵌套代码同时按顺序比较,当结果匹配时,就跳到满足条件的语句执行。因此根据发生的可能性对case的值排序,最有可能的放在第一位就可以使选择过程更合理,从而提高了效率。(四)循环
6、过程的优化循环语优化对于有些任务不需要循环变量参加运算时,可以将它们放到循环外面,将没有必要执行多次的操作全部集合到一个init的初始化程序中也有利于优化循环语句。优化延时函数将自加的形式改为自减形式,如:自加的形式voiddelay(void){unsignedintj;for(j=0;jO;j—);}两个函数的延时效果大致相当,但是几乎所有的C编译对后者生成的代码均比前一种少1〜3个字节,因为后一种方式可以产生MCU为0转移所需要的指令。类似的,do-while循环比while循环编译后生成的代码要短(五)函数调用优化C语言中,调用函数的第一步是传递参数给寄存器或堆栈。当函数的参数
7、很多时,就要调用大量的堆栈空间,开销将会很大。当结构作为函数参数传递的内容时,编译器的第一步操作是把整个结构复制到堆栈,这种情况下堆栈空间的使用会非常大。此外,如果结构作为函数返回值,调用程序会把堆栈空间保留,把结构地址传递给函数同时调用函数,接着把函数返回。最后,调用程序需要再把堆栈空间清除,并把返回的结构拷贝到第二个结构当中。这样代码和堆栈的开销就会非常惊人。因此应禁止传递结构,一般用结构指针替代来避免这种开销,。(六)减少运算强度[3]使
此文档下载收益归作者所有