C源程序优化

合集下载

编译器优化原理

编译器优化原理

编译器优化原理编译器优化是指编译器根据特定的优化原理和算法,对源代码进行分析和变换,以达到提高程序的执行效率和减少资源消耗的目的。

下面介绍一些常见的编译器优化原理。

1. 代码重排(Code Reordering):编译器可以通过重排源代码中的指令,使得程序的分支预测更准确,减少分支跳转的次数,从而提高程序的性能。

例如,将频繁执行的代码放在一起,以利用CPU的流水线机制。

2. 循环展开(Loop Unrolling):编译器可以将循环中的多次迭代展开成多个独立的迭代,从而减少循环控制的开销和循环内部的依赖。

这样可以提高程序的并行性,进而提高程序的执行效率。

3. 公共子表达式消除(Common Subexpression Elimination):编译器可以通过在不同的表达式中找到相同的子表达式,并将其计算结果保存起来,以减少重复的计算。

这样可以减少程序的运行时间和内存访问,提高程序的执行效率。

4. 常数传播(Constant Propagation):编译器可以根据程序的静态分析,将常数值替代相应的变量或表达式,以减少程序执行过程中的运算和内存访问。

这样可以提高程序的执行效率,尤其是在循环中频繁执行的代码中。

5. 冗余代码删除(Dead Code Elimination):编译器可以通过静态分析,找到程序中没有被使用的代码,并将其删除,以减少程序的体积和资源消耗。

这样可以提高程序的加载速度和运行效率。

6. 数据流分析(Data Flow Analysis):编译器可以通过数据流分析,确定程序中的数据依赖关系和控制流程,以帮助进行其他优化操作。

例如,通过数据流分析可以确定循环中的迭代次数,从而进行循环展开和循环不变代码移动等优化。

以上是一些常见的编译器优化原理,编译器可以根据具体的优化目标和算法来选择适合的优化手段,提高程序的执行效率和资源利用率。

编译器优化是编译器设计和实现中非常重要的一部分,也是实现高效程序的关键技术之一。

【转载】C代码优化方案

【转载】C代码优化方案

【转载】C代码优化⽅案C代码优化⽅案1、选择合适的算法和数据结构2、使⽤尽量⼩的数据类型3、减少运算的强度 (1)查表(游戏程序员必修课) (2)求余运算 (3)平⽅运算 (4)⽤移位实现乘除法运算 (5)避免不必要的整数除法 (6)使⽤增量和减量操作符 (7)使⽤复合赋值表达式 (8)提取公共的⼦表达式4、结构体成员的布局 (1)按数据类型的长度排序 (2)把结构体填充成最长类型长度的整倍数 (3)按数据类型的长度排序本地变量 (4)把频繁使⽤的指针型参数拷贝到本地变量5、循环优化 (1)充分分解⼩的循环 (2)提取公共部分 (3)延时函数 (4)while循环和do…while循环 (6)循环展开 (6)循环嵌套 (7)Switch语句中根据发⽣频率来进⾏case排序 (8)将⼤的switch语句转为嵌套switch语句 (9)循环转置 (10)公⽤代码块 (11)提升循环的性能 (12)选择好的⽆限循环6、提⾼CPU的并⾏性 (1)使⽤并⾏代码 (2)避免没有必要的读写依赖7、循环不变计算8、函数 (1)Inline函数 (2)不定义不使⽤的返回值 (3)减少函数调⽤参数 (4)所有函数都应该有原型定义 (5)尽可能使⽤常量(const) (6)把本地函数声明为静态的(static)9、采⽤递归10、变量 (1)register变量 (2)同时声明多个变量优于单独声明变量 (3)短变量名优于长变量名,应尽量使变量名短⼀点 (4)在循环开始前声明变量11、使⽤嵌套的if结构1、选合适的算法和数据结构选择⼀种合适的数据结构很重要,如果在⼀堆随机存放的数中使⽤了⼤量的插⼊和删除指令,那使⽤链表要快得多。

数组与指针语句具有⼗分密切的关系,⼀般来说,指针⽐较灵活简洁,⽽数组则⽐较直观,容易理解。

对于⼤部分的编译器,使⽤指针⽐使⽤数组⽣成的代码更短,执⾏效率更⾼。

在许多种情况下,可以⽤指针运算代替数组索引,这样做常常能产⽣⼜快⼜短的代码。

DSP环境下C语言编程的优化实现

DSP环境下C语言编程的优化实现

DSP环境下C语言编程的优化实现1 引言DSP(Digital Signal Processor,数字信号处理器)是一种具有特殊结构的微处理器。

自20世纪80年代初诞生以来,DSP在短短的十多年间里得到了飞速的发展。

随着DSP性能价格比和开发手段的不断提高,DSP已经在通信和信息系统、信号与信号处理、自动控制、雷达、军事、航空航天、医疗、家用电器等许多领域得到了广泛的应用。

与单片机相比,DSP多用于算法比较复杂、乘加运算量比较大的应用,如通信、雷达、音视频处理等。

为了追求代码的高效,过去一般用汇编语言来编制DSP程序。

随着DSP应用范围不断延伸,应用的日趋复杂,汇编语言程序在可读性、可修改性、可移植性和可重用性的缺点日益突出,软件需求与软件生产力之间的矛盾日益严重。

引入高级语言(如C语言、C++、Java),可以解决该矛盾。

在高级语言中,C语言无疑是最高效、最灵活的。

各个DSP 芯片公司都相继推出了相应的C语言编译器。

鉴于DSP应用的复杂度,在用C语言进行DSP软件开发时,一般先在基于通用微处理器的PC机或工作站上对算法进行仿真,仿真通过后再将C程序移植到DSP平台中。

按照软件开发的顺序,相应的优化工作包括两个部分:一是仿真环境中的优化,二是DSP目标环境中的进一步优化。

本文主要探讨的是前者,给出了在DSP开发环境下有效C语言编程的策略,以获得最高效的编译代码;并针对策略,设计了具体实例,并比较了不同策略在TMS320C54x CCS(v1.2)和TMS320C6000 CCS(v1.2)环境下编译的结果。

2 DSP开发环境下有效C编程的策略基于通用微处理器的PC机环境中的优化工作是针对C程序的通用特性来考虑的。

这方面的优化工作主要包括数据类型选择、数值操作优化、快速算法、变量定义和使用优化、函数调用优化、程序流程优化以及计算表格化等。

2.1 数据类型标准C语言提供了丰富的数据类型整型、浮点、枚举、指针、结构、联合等。

基于KeilC51编译器的程序优化设计精简版范文

基于KeilC51编译器的程序优化设计精简版范文

基于KeilC51编译器的程序优化设计基于Keil C51编译器的程序优化设计1. 引言2. Keil C51编译器简介Keil C51是一款由Keil软件公司推出的针对8051系列单片机的C语言编译器。

其具有高效的编译速度、占用较小的存储空间和良好的代码质量等优点,广泛应用于嵌入式系统开发中。

3. 程序优化设计方法为了优化基于Keil C51编译器的程序,可采取以下一些方法:3.1 选择合适的编译选项在编译程序时,可以通过选择合适的编译选项来优化代码的。

例如,可以开启优化选项,使编译器对程序进行优化处理,在保证功能正确的前提下,尽可能地减小代码的大小和提高执行效率。

3.2 适当使用宏定义宏定义是C语言中一种常用的代码复用方式。

通过适当使用宏定义,可以减少程序中的重复代码,提高代码的可读性和可维护性。

3.3 减少函数调用函数调用会导致程序的执行流程发生跳转,增加了额外的开销。

在需要频繁执行的代码中,可以考虑将这部分代码直接嵌入到调用的位置,避免函数调用的开销,提高程序的执行效率。

3.4 优化循环结构循环结构是程序中常见的一种控制结构,对循环结构进行优化可以提高程序的执行效率。

例如,可以通过适当选择循环变量的数据类型、减少循环的次数、合理选择循环的结束条件等方式来优化循环结构。

3.5 减少内存访问次数内存访问次数是影响程序性能的重要因素之一。

通过减少内存的访问次数,可以提高程序的执行效率。

例如,可以将频繁使用的数据存储在寄存器中,减少对内存的读写次数。

4. 结论基于Keil C51编译器的程序优化设计可以通过选择合适的编译选项、适当使用宏定义、减少函数调用、优化循环结构和减少内存访问次数等方式来实现。

优化后的程序可以提高系统的性能、降低资源消耗和能耗等方面的需求。

C编程技巧提高代码效率的七大秘诀

C编程技巧提高代码效率的七大秘诀

C编程技巧提高代码效率的七大秘诀在C语言编程中,提高代码效率是程序员们一直探索的目标。

通过运用一些技巧和策略,我们可以使代码更具效率和可读性。

本文将介绍C编程中七个重要的技巧,可帮助提高代码效率。

一、使用合适的数据类型正确选择合适的数据类型可以有效降低内存占用和提高运行速度。

在C中,int类型通常用于整数,而float和double类型适用于浮点数。

避免使用过大或过小的数据类型,以免造成内存浪费或精度丢失。

二、避免使用全局变量全局变量会在程序整个生命周期中存在,容易引发命名冲突和内存泄漏的问题。

尽量使用局部变量,将变量的作用范围限制在需要的地方,可以提高代码的可维护性和可读性。

三、避免重复计算在编写代码时,避免重复计算是提高效率的重要策略。

可以通过将计算结果保存在变量中,以便后续使用,而不是在每次需要时重新计算。

这样可以减少不必要的计算步骤,节省时间和资源。

四、使用位运算加速位运算是C语言中的一项重要技术,可以实现快速的计算和操作。

通过位运算,可以有效地对数字进行各种操作,如与、或、异或等。

这些运算通常比传统的算术运算更高效。

五、优化循环结构循环是C语言中常用的结构之一,也是代码效率的关键。

在编写循环时,要尽量避免在循环内部进行复杂的计算或操作。

可以将这些计算或操作移出循环,减少不必要的重复工作,从而提高代码的效率。

六、有效使用函数函数是C语言中的一种重要的代码组织方式。

通过将重复的代码抽象为函数,可以提高代码的可读性和可维护性。

同时,函数的调用比代码的重复复制更加高效。

因此,合理使用函数可以提高代码的效率。

七、减少内存分配和释放内存的分配和释放是C语言中常涉及的操作。

频繁的内存分配和释放会影响代码的效率。

对于需要重复分配和释放内存的情况,可以使用内存池或缓存技术来优化。

这样可以减少操作系统的开销,提高代码的效率。

总结通过运用以上七个C编程技巧,可以有效地提高代码的效率。

选择合适的数据类型、避免使用全局变量、避免重复计算、使用位运算加速、优化循环结构、有效使用函数以及减少内存分配和释放等策略都是提高代码效率的有效方法。

DSP平台c语言编程优化方法精

DSP平台c语言编程优化方法精

数又很多,往往几个时脉就可以完成却浪费时间在存取堆栈的内容上,所以干脆将这些很短的子程序直接写在主程序当中,以减少时脉数。

方法六写汇编语言虽然由C语言所编译出来的汇编语言可以正确无误的执行,但是这个汇编语言却不是最有效率的写法,所以为了增加程序的效率,于是在某些地方,例如一些被呼叫很多次且程序代码不长的函式(function),必须改以自己动手写汇编语言来取代。

方法七利用平行处理的观念C6x是一颗功能强大的处理器,它CPU勺内部提供了八个可以执行不同指令的单元,也就是说最多可以同时处理八个指令。

所以如果我们可以用它来作平行处理,我们就可以大大的缩短程序执行的时间,最有效率的来利用它来作解码的动作。

最后还要知道:第三级优化(-03),效率不高(经验),还有一些诸如用一条读32位的指令读两个相邻的16位数据等,具体情况可以看看C优化手册。

但这些效率都不高(虽然ti的宣传说能达到80%我自己做的时候发现绝对没有这个效率!65泌差不多),如果要提高效率只能用汇编来做了。

还有要看看你的c程序是怎么编的,如果里面有很多中断的话,6000可以说没什么优势。

还有,profiler 的数据也是不准确的,比实际的要大,大多少不好说。

还有dsp在初始化的时候特别慢,这些时间就不要和pc机相比了,如果要比就比核心的部分。

关于profileC6x的Debug工具提供了一个profile 界面。

在图9中,包括了几个重要的窗口,左上角的窗口是显示出我们写的C语言,可以让我们知道现在做到了哪一步。

右上角的窗口显示的是C6x所编译出来的汇编语言,同样的我们也可以知道现在做到了哪一步。

左下角的窗口是命令列,是让我们下指令以及显示讯息的窗口。

而中间的profile 窗口就是在profile模式下最重要的窗口,它显示出的项目如下表:表5:profile 的各项参数[8]字段意义Cou nt被呼叫的次数In elusive 包含子程序的总执行clock数Inel-Max包含子程序的执行一次最大clock数Exclusive不包含子程序的总执行clock数Excl-Max不包含子程序的执行一次最大clock数利用这个profile 模式我们可以用来分析程序中每个函数被呼叫的次数、执行的时脉数等等。

提高C语言程序的执行效率

提高C语言程序的执行效率

提高C语言程序的执行效率C语言是一种高效的编程语言,但是在编写程序时,仍然有很多方法可以进一步提高程序的执行效率。

下面是一些可以帮助你优化C语言程序的方法:1.使用合适的算法和数据结构:选择正确的算法和数据结构对于程序性能至关重要。

通过选择最适合特定问题的数据结构和算法,可以显著提高程序的效率。

例如,使用哈希表而不是线性可以快速查找数据。

2.减少循环次数:循环是程序中最常见的性能瓶颈之一、你可以通过减少循环的次数来提高程序的效率。

这可以通过避免重复计算和重复操作来实现。

3.减少函数调用次数:函数调用是有一定开销的,尤其是在递归调用时。

尽量减少函数的嵌套和递归调用,可以显著提高程序的效率。

4.使用适当的数据类型:选择适当的数据类型可以减少内存占用和提高运行速度。

例如,使用整数类型代替浮点数类型可以提高运算速度。

另外,使用位操作可以更快地执行一些操作,如位移和位掩码。

5.避免冗余计算:如果一个变量的值在循环中没有变化,可以将计算移到循环之外,避免重复计算。

这样可以减少不必要的计算,提高程序的效率。

6.减少内存访问次数:内存访问是有一定开销的,尤其是在访问缓存行时。

尽量减少对内存的访问次数,可以提高程序的效率。

这可以通过使用局部变量替代全局变量、减少数组访问次数等方式实现。

7. 编译器优化:现代的编译器通常会进行一定的优化,以提高程序的执行效率。

你可以尝试使用优化选项来编译代码,例如对循环进行展开、inline函数等,以获得更好的性能。

8.并行化和多线程:如果你的程序可以并行执行,可以考虑使用多线程或并行计算来加快程序的执行速度。

这可以通过使用线程库或并行计算库来实现,并确保线程之间正确地共享数据。

9.降低输入/输出操作:输入/输出操作通常是较慢的操作。

如果可能的话,可以尝试减少输入/输出操作的次数,或者使用更高效的输入/输出方法,如内存映射文件。

10.使用内联汇编:在一些特定的情况下,使用内联汇编可以获得更高的性能。

C语言性能优化代码优化和算法改进

C语言性能优化代码优化和算法改进

C语言性能优化代码优化和算法改进C语言性能优化:代码优化和算法改进在编程领域中,性能优化是提高程序运行效率和响应速度的关键因素之一。

C语言是一种强大的编程语言,但在实际应用中,如果不进行代码优化和算法改进,可能会导致程序运行速度慢、内存占用过大等问题。

本文将介绍一些C语言性能优化的方法,包括代码优化和算法改进。

1. 代码优化代码优化是通过改进程序代码的结构和语法,以减少运行时的时间和空间开销。

以下是一些常用的代码优化技巧:1.1 减少循环次数循环是程序中常见的结构之一,在提升性能时,我们需要尽量减少循环的次数。

可以考虑使用更高效的循环方式,如使用while循环替代for循环,避免不必要的循环条件判断。

1.2 使用局部变量在编写代码时,尽量使用局部变量而不是全局变量。

局部变量的访问速度更快,可以减少内存访问时间,从而提高程序性能。

1.3 避免重复计算在某些情况下,同样的计算可能会在代码中多次出现,可以通过使用中间变量来避免重复计算,从而提高代码的执行效率。

1.4 使用位操作位操作是C语言的特有特性,可以通过位操作实现一些复杂的运算,例如位与、位或、位异或等。

合理利用位操作可以提高程序的效率。

2. 算法改进算法改进是通过优化程序中的算法,以减少运算和存储资源的使用,从而提高程序性能。

以下是一些常用的算法改进技巧:2.1 数据结构选择在选择数据结构时,需要根据具体的应用场景分析选择合适的数据结构。

例如,当需要频繁进行插入和删除操作时,可以选择链表而不是数组,以提高效率。

2.2 缓存优化利用缓存机制可以减少内存访问时间,从而提高程序运行速度。

可以通过调整数据的存储方式、使用局部性原理等方法来进行缓存优化。

2.3 分而治之对于一些复杂的问题,可以使用分而治之的思想将问题划分为多个子问题,并通过递归或迭代的方式分别解决子问题,最后将结果合并。

这种方式可以显著提高程序运行效率。

2.4 并行计算利用多线程或并行计算技术可以将程序的计算任务分配给多个处理器或核心,并发执行,从而提高程序的运行速度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6 欢迎光临中国最大的电子工程师应用网站 网址:
电子下载站 资料版权归合法所有者所有
i++; //用户程序 } 或: unsigned int i; i=1000; do i--; //用户程序 while (i>0);
严禁用于商业用途
在这两种循环中,使用 do…while 循环编译后生成的代码的长度短于 while 循环。 7、查表 在程序中一般不进行非常复杂的运算,如浮点数的乘除及开方,以及一些复杂的数学模型的 插补运算,对这些即消耗时间又消耗资源的运算,应尽量使用查表的方式,并且将数据表置 于程序存储区。如果直接生成所需的表比较困难,也尽量在启动时先计算,然后在数据存储 器中生成所需的表,后以在程序运行直接查表就可以了,减少了程序执行过程中重复计算的 工作量。 8、其它 比如使用在线汇编以及将字符串和一些常量保存在程序存储器中,均能够优化生成的代码。
严禁用于商业用途
两个函数的延时效果相似,但几乎所有的 C 编译对后一种函数生成的代码均比前一种代码少 1~3 个字节, 因为几乎所有的 MCU 均有为 0 转移的指令, 采用后一种方式能够生成这类指令。 在使用 while 循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成的代码 更少 1~3 个字母。 但是在循环中有通过循环变量“i”读写数组的指令时,使用预减循环时有可能使数组超界, 要引起注意。 (3)while 循环和 do…while 循环 用 while 循环时有以下两种循环形式: unsigned int i; i=0; while (i<1000) {
严禁用于商业用途
数值大小不变,但是生成的代码却少了非常多。在很多情况下,如果忽略小数点部分对整个 数值的影响不大,就忽略小数点部分,改为整型或长整型。如果在中间变量为浮点型且不能 忽略小数点,也可以将其乘以 10n 方后转换为长整型数,但在最后运算时应记着除去 10n。 6、循环 (1)、循环语句 对于一些不需要循环变量参加运算的任务可以把它们放到循环外面, 这里的任务包括表达式、 函数的调用、指针运算、数组访问等。应该将没有必要执行多次的操作全部集合在一起,放 到一个 init 的初始化程序中进行。 (2)、延时函数: 通常使用的延时函数均采用自加的形式: void delay (void) {
4 欢迎光临中国最大的电子工程师应用网站 网址:
电子下载站 资料版权归合法所有者所有
a=a*9 可以改为: a=(a<<3)+a (4)、少用浮点运算 int a=200; float b; b=a*89.65 在上例中,如果能够不使用浮点运算,而改为长整型,如下: int a=200; long int b; b=a*8965/100;
2 欢迎光临中国最大的电子工程师应用网站 网址:
电子下载站 资料版权归合法所有者所有
严禁用于商业用途
一种合适的数据结构也很重要, 比如你在一堆随机存放的数中使用了大量的插入和删除指令, 那使用链表要快得多。 数组与指针具有十分密码的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易 理解。对于大部分的 C 编译器,使用指针比使用数组生成的代码更短,执行效率更高。但是 在 Keil 中则相反,使用数组比使用的指针生成的代码更短。 2、使用尽量小的数据类型 能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义 的变量就不要用长整型(long int),特别是能不用浮点型(float)变量就不要使用浮点型变量,使 用浮点型变量会使程序代码增加很大。当然,在定义变量后不能超过变量的作用范围,如果 超过变量的范围赋值,C 编译器并不报错,但程序运行结果却错了,而且这样的错误很难发 现。 在 keil 中,应说明指针所指向的对象类型,少用通用型指针。 在 ICCAVR 中,可以在 Options 中设定使用 printf 参数,尽量使用基本型参数(%c、%d、%x、 %X、%u 和%s 格式说明符),少用长整型参数(%ld、%lu、%lx 和%lX 格式说明符),至于浮 点型的参数(%f)则尽量不要使用,其它 C 编译器也一样。在其它条件不变的情况下,使用%f 参数,会使生成的代码的数量增加很多,执行速度降低。 3、使用自加、自减指令 通常使用自加、 自减指令和复合赋值表达式(如 a-=1 及 a+=1 等)都能够生成高质量的程序代码, 编译器通常都能够生成 inc 和 dec 之类的指令,而使用 a=a+1 或 a=a-1 之类的指令,有很多 C 编译器都会生成二到三个字节的指令。在 AVR 单片适用的 ICCAVR、GCCAVR、IAR 等 C 编 译器中,以上几种书写方式生成的代码是一样的,都能够生成 inc 和 dec 之类高质量的代码。 4、减少运算的强度 可以使用运算量小但功能相同的表达式替换原来复杂的的表达式。如下: (1)、求余运算。 a=a%8; 可以改为: a=a&7; 说明:位操作只需一个指令周期即可完成,而大部分的 C 编译器的“%”运算均是调用子程 序来完成,代码长、执行速度慢。通常,只要求是求 2n 方的余数,均可使用位操作的方法来
欢迎光临中国最大的电子工程师应用网站 网址:
电子下载站 资料版权归合法所有者所有
6、表达式
严禁用于商业用途
对于一个表达式中各种运算执行的优先顺序不太明确或容易混淆的地方,应当采用圆括号明 确指定它们的优先顺序。一个表达式通常不能写得太复杂,如果表达式太复杂,时间久了以 后,自己也不容易看得懂,不利于以后的维护。 7、函数 对于程序中的函数,在使用之前,应对函数的类型进行说明,对函数类型的说明必须保证它 与原来定义的函数类型一致,对于没有参数和没有返回值类型的函数应加上“void”说明。 如果果需要缩短代码的长度,可以将程序中一些公共的程序段定义为函数,在 Keil 中的高级 别优化就是这样的。如果需要缩短程序的执行时间,在程序调试结束后,将部分函数用宏定 义来代替。注意,应该在程序调试结束后再定义宏,因为大多数编译系统在宏展开之后才会 报错,这样会增加排错的难度。 8、尽量少用全局变量,多用局部变量。因为全局变量是放在数据存储器中,定义一个全局变 量,MCU 就少一个可以利用的数据存储器空间,如果定义了太多的全局变量,会导致编译器 无足够的内存可以分配。 而局部变量大多定位于 MCU 内部的寄存器中, 在绝大多数 MCU 中, 使用寄存器操作速度比数据存储器快,指令也更多更灵活,有利于生成质量更高的代码,而 且局部变量所的占用的寄存器和数据存储器在不同的模块中可以重复利用。 9、设定合适的编译程序选项 许多编译程序有几种不同的优化选项,在使用前应理解各优化选项的含义,然后选用最合适 的一种优化方式。通常情况下一旦选用最高级优化,编译程序会近乎病态地追求代码优化, 可能会影响程序的正确性,导致程序运行出错。因此应熟悉所使用的编译器,应知道哪些参 数在优化时会受到影响,哪些参数不会受到影响。 在 ICCAVR 中,有“Default”和“Enable Code Compression”两个优化选项。 在 CodeVisionAVR 中, “Tiny”和“small”两种内存模式。 在 IAR 中,共有 7 种不同的内存模式选项。 在 GCCAVR 中优化选项更多,一不小心更容易选到不恰当的选项。 5.1.2 代码的优化 1、选择合适的算法和数据结构 应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算 机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序 或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择
5 欢迎光临中国最大的电子工程师应用网站 网址:
电子下载站 资料版权归合法所有者所有
unsigned int i; for (i=0;i<1000;i++) ; } 将其改为自减延时函数: void delay (void) { unsigned int i; for (i=1000;i>0;i--) ; }
电子下载站 资料版权归合法所有者所有 严禁用于商业用途
C 源程序优化
对程序进行优化,通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一 个予盾的统一,一般是优化了代码的尺寸,就会带来执行时间的增加,如果优化了程序的执 行速度,通常会带来代码增加的副作用,很难鱼与熊掌兼得,只能在设计时掌握一个平衡点。 1、程序的书写结构 虽然书写格式并不会影响生成的代码质量,但是在实际编写程序时还是应该尊循一定的书写 规则,一个书写清晰、明了的程序,有利于以后的维护。在书写程序时,特别是对于 While、 for、do…while、if…elst、switch…case 等语句或这些语句嵌套组合时,应采用“缩格”的书 写形式, 2、标识符 程序中使用的用户标识符除要遵循标识符的命名规则以外, 一般不要用代数符号(如 a、 b、 x1、 y1)作为变量名,应选取具有相关含义的英文单词(或缩写)或汉语拼音作为标识符,以增加程 序的可读性,如:count、number1、red、work 等。 3、程序结构 C 语言是一种高级程序设计语言,提供了十分完备的规范化流程控制结构。因此在采用 C 语 言设计单片机应用系统程序时,首先要注意尽可能采用结构化的程序设计方法,这样可使整 个应用系统程序结构清晰,便于调试和维护。于一个较大的应用程序,通常将整个程序按功 能分成若干个模块,不同模块完成不同的功能。各个模块可以分别编写,甚至还可以由不同 的程序员编写,一般单个模块完成的功能较为简单,设计和调试也相对容易一些。在 C 语言 中,一个函数就可以认为是一个模块。所谓程序模块化,不仅是要将整个程序划分成若干个 功能模块,更重要的是,还应该注意保持各个模块之间变量的相对独立性,即保持模块的独 立性,尽量少使用全局变量等。对于一些常用的功能模块,还可以封装为一个应用程序库, 以便需要时可以直接调用。但是在使用模块化时,如果将模块分成太细太小,又会导致程序 的执行效率变低(进入和退出一个函数时保护和恢复寄存器占用了一些时间)。 4、定义常数 在程序化设计过程中,对于经常使用的一些常数,如果将它直接写到程序中去,一旦常数的 数值发生变化,就必须逐个找出程序中所有的常数,并逐一进行修改,这样必然会降低程序 的可维护性。因此,应尽量当采用预处理命令方式来定义常数,而且还可以避免输入错误。 5、使用条件编译 能够使用条件编译(ifdef)的地方就使用条件编译而不使用 if 语句,有利于减少编译生成的代 码的长度。
相关文档
最新文档