网站大量收购闲置独家精品文档,联系QQ:2885784924

C语言中级教程 编程效率-17ppt课件.pptVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言中级教程 编程效率-17ppt课件

C语言中级培训 十一、编程效率 关于程序效率(1) 没有意识到程序效率的编码者,可能会写如下的代码: for(?i=0;?i1000;?i++?) ? ????{????GetLocalHostName(?hostname?);? ????????...? ????}? GetLocalHostName的意思是取得当前计算机名。实际上取得一次机器的名字就可以,而把它放在循环体中,它就被调用了1000次,有999次是多余的。 如果没有意识到无效率行为的危害,程序中多次出现如此效率低下的行为,那么程序运行会非常慢,有时会慢得使用户难以接受。 区分老手和新手的试金石: 求n! . 关于程序效率(2) 程序效率 程序效率,是用执行的步骤(step)数(时间复杂度)、占内存的多少(空间复杂度)来衡量的。 完成某项工作,执行的步骤(step)的次数最少、占用内存最小是程序员所追求的。特别是嵌入式系统的开发,内存等资源都是有限的。 因此,提高效率的着眼点应该是: 减少执行次数 减少占用空间 如何提高程序效率(1) 效率改善的指导原则: 在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率; 如果程序的正确性、可靠性得不到保证,提高效率就失去了根本; 如果程序的健壮性得不到保证,提高效率就失去了目标; 如果程序的可读性得不到保证,提高效率就失去了方向; 如何提高程序效率(2) 以提高程序的全局效率为主,提高局部效率为辅; 如果只从局部角度出发,局部效率的改善一般对全局效率改善作用不大,有时甚至影响全局效率的改善; 应该从全局角度出发,整体考虑,作出统一改善的调整,有的时候局部利益为配合整体需要应作出牺牲; 如何提高程序效率(3) 在优化程序的效率时,应当先找出限制效率的“瓶颈”——关键点: 非关键点的改善,不会根本改变效率的现状; 先进行一些基准数据测量和问题收集,寻找提高效率的关键点; 有时一次关键的改动还不能解决问题,还需要进一步的数据测量和持续的改进,直到符合要求; 如何提高程序效率(4) 先优化数据结构和算法,再优化执行代码; 因为O(n2)的算法写不出O(nlog2n)的程序,因此写程序前应该考虑数据结构和算法的选择和优化; 如果你已经选择了正确的算法,那么到了写程序时,才有可能去关心执行代码的优化问题; 如何提高程序效率(5) 时间效率和空间效率可能对立,此时应当分析、权衡哪个更重要,作出适当的折中; 一般来讲,在空间允许的时候,我们会花费空间换取时间效率的大幅提升; 在时间效率和空间对立的时候,我们应根据需要,在两者之间作出适当折中; 如何提高程序效率(6) 时间效率改善的措施——减少内存分配的次数 一次能够申请的内存,就不要多次申请; 函数中的存储会被多次访问 ,“相对不变量”的变量请定义成为static。如: GetLocalHostName(char*?name)? {? ????char?funcName[]?=?GetLocalHostName; ? ?? sys_log(?%s?begin......,?funcName?);? ????...? ????sys_log(?%s?end......,?funcName?);? }? 如果这是一个经常调用的函数,每次调用时都要对funcName分配内存,这个开销很大。把这个变量声明成static,当函数再次被调用时,就会省去了分配内存的开销,执行效率很好。 如何提高程序效率(7) 时间效率改善的措施 提高循环体效率 减少循环次数 减少循环体内执行语句的数量 例子参见《1.1 关于程序效率》序中的例子 如何提高程序效率(8) 在多重循环中,如果有可能,应当将长的循环放在最内层,短的循环放在最外层,以减少CPU 跨切循环层的次数。下例a和b的功能一样,但效率不同: 例a: for (i=0; i5;i++) //5次切换 { for (j=0; j100; j++) Dothing(); } 例b: for (j=0; j100;j++) //100次切换 { for (i=0; i5; i++) Dothing(); } 如何提高程序效率(9) 减少指针定位 指针(-)使用很方便,但实际运行往往需要进行地址计算;不必要的地址计算会导致性能下降; 尽可能减少-的多级嵌套。 如何提高程序效率(10) 提高数学表达式的效率 a*b + a*c == a*(b+

文档评论(0)

118zhuanqian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档