- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编程效率.ppt
沈阳东软软件股份有限公司 NEU-APN IA事业部 (机密) 编程效率 课程主要内容 程序效率 问题与习题 主要内容 1.1 关于程序效率 1.2 如何提高程序效率 1.3 实例 1.1 关于程序效率 序 没有意识到程序效率的编码者,可能会写如下的代码: for(?i=0;?i1000;?i++?){?????????GetLocalHostName(?hostname?);?????????...?????}? GetLocalHostName的意思是取得当前计算机名。实际上取得一次机器的名字就可以,而把它放在循环体中,它就被调用了1000次,其中999次是多余的。 如果不意识到无效率行为的危害,程序中多次出现如此没有效率的行为,那么程序运行效率会非常慢,有时会慢得使用用户难以接受。 程序效率 程序效率,是用执行的步骤(step)数――时间复杂度、占内存的多少来衡量的――空间复杂度。完成某项工作,执行的步骤(step)的次数最少、占用内存最小是程序员所追求的。特别是嵌入式系统的开发,内存等资源都是有限的。 因此,提高效率的着眼点应该是 减少执行次数 减少占用空间 1.2 如何提高程序效率(1) 效率改善的指导原则 满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率; 如果程序的正确性、可靠性得不到保证,提高效率就失去了根本; 如果程序的健壮性得不到保证,提高效率就失去了目标; 如果程序的可读性得不到保证,提高效率就失去了方向; 以提高程序的全局效率为主,提高局部效率为辅; 如何只从局部角度出发,局部效率的改善一般对全局效率改善作用不大,有时甚至影响全局效率的改善; 应该从全局角度出发,整体考虑,作出统一改善的调整,有的时候局部利益为配合整体需要应作出牺牲; 举例。 1.2 如何提高程序效率(2) 在优化程序的效率时,应当先找出限制效率的“瓶颈”; 非关键点的改善,不会根本改变效率的现状; 先进行一些基准数据测量和问题收集,寻找提高效率的关键点; 有时一次关键的改动还不能解决问题,还需要进一步的数据测量和持续的改进,直到符合要求; 先优化数据结构和算法,再优化执行代码; 因为O(n2)的算法写不出O(nlog2n)的程序,因此写程序前应该考虑数据结构和算法的选择和优化; 如果你已经选择了正确的算法,那么只有到了写程序的最后,才有可能去关心执行代码的优化问题; 时间效率和空间效率可能对立,此时应当分析那个更重要,作出适当的折衷; 一般来讲,在空间允许的时候,我们会花费空间换取时间效率的大幅提升; 当空间受限--时间效率和空间对立的时候,我们根据需要,在两者之间作出适当折中; 1.2 如何提高程序效率(3) 时间效率改善的考虑 减少内存分配的次数 一次能够申请的内存,就不要多次申请; 被多次访问函数中存储“不变量”的变量请定义成为static。如: GetLocalHostName(char*?name)?{?????char?funcName[]?=?GetLocalHostName;?????????sys_log(?%s?begin......,?funcName?);?????...?????sys_log(?%s?end......,?funcName?);?}?如果这是一个经常调用的函数,每次调用时都要对funcName进行分配内存,这个开销很大啊。把这个变量声明成static吧,当函数再次被调用时,就会省去了分配内存的开销,执行效率也很好。 提高循环体效率 减少循环次数 减少循环体内执行语句的数量 例子参见《1.1 关于程序效率》序中的例子 1.2 如何提高程序效率(4) 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU 跨切循环层的次数 下面例子a和例子b的功能一样,但效率不同 例a: for (i=0; i5;i++) { for (j=0; j100; j++) { Dothing(); } } 例b: for (j=0; j100;j++) { for (i=0; i5; i++) { Dothing(); } } 1.2 如何提高程序效率(5) 减少指针定位 指针(-)使用很方便,但实际运行往往需要进行地址计算;不必要的地址计算会
您可能关注的文档
最近下载
- 《爆炸和火灾危险场所防雷装置检测技术规范GB/T 32937-2016》知识培训.pptx VIP
- 3.1 波的形成 课件-高二上学期物理人教版(2019)选择性必修第一册.pptx VIP
- 《应用密码学》配套教学课件.ppt VIP
- 演讲台风训练.ppt VIP
- 演讲比赛培训方案.pptx VIP
- 演讲台风适用于演讲训练培训.ppt VIP
- 运输企业安全教育培训制度.docx VIP
- JC-T 2027-2010 高纯石英中杂质含量的测定方法—电感耦合等离子体原子发射光谱法.pdf VIP
- 注册安全工程师考试《管理笔记》.docx VIP
- 宁夏平罗县几种典型土壤修正系数的确定.pdf VIP
文档评论(0)