程序优化的三个级别.docx_第1页
程序优化的三个级别.docx_第2页
程序优化的三个级别.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序优化的三个级别HouSisongGM2004.11.07整理tag:代码优化,程序优化,综级优化,代码调整,新的视角,表驱动状态机文章来源于abp论坛中的一篇帖子:/viewtopic.php?t=1063(原文章写于2003.10.14晚)到了allaboutprogram后被人叫做性能狂人,我也不知道为什么会有这个称号,其实我并不是一个偏激的人,相反我很随和,平易近人.(哈哈)。为了与新的身份大致相符,所以尝试写篇文章,写写自己理解的优化的三个级别。有人不谈优化,甚至憎恶优化,我只能说那只是因为他没有能力做到!那是他还不能按时写出程序、不能写出正确的程序、不能写出规范的程序。很多优秀的程序员都喜欢追求最快的程序速度,我想大多数程序员可能都想使自己写的程序能够比别人写的程序运行得更快;优化前需要问自己的几个问题:为什么要优化 、优化的目标是什么、哪些部分才需要优化、能够接受由此带来的可能的资源消耗(人力、维护、空间等)吗?程序优化有三个层级;它们依次产生更显著的优化代码,在考虑优化方案时可以尝试从不同的层级着手思考优化的方案:(也许有人表达过这些观点了,但这也是我对优化的实际理解 ;我的分类方法主要依据了具体去实现一个优化时思考问题的切入角度来划分的,有时候他们之间的界限也并不明显,具体是不是产生更显著的优化效果也不是确信的)第一级:代码调整代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题;所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;这个级别的优化需要掌握大量的小的优化技巧和知识,需要不断的积累;简单的语句调整、公共表达式提取、废代码删除等当前的很多编译器也能做到了,但也需要了解一些编译器的优化能力使自己的代码配合编译器做好优化;用汇编重写并不是简单把高级语言改写为汇编实现,那样写的汇编很可能没有当今的编译器产生的代码好,所以如果决定用汇编实现,那就应该按照汇编的角度来规划自己的实现,适当的参考编译器生成的汇编码也是可取的(特别是新手,我也一样);在某些领域,使用CPU的新特性和新的指令集等将产生巨大的性能收益,这些地方经常采用汇编来实现。第二级:新的视角新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法;发掘问题的本来意义,从不同的角度思考面对的问题,使用适合于问题的的算法; 尝试打破一些规则,发掘和怀疑自己的某些假定,恢复问题的本来面目;第三级:表驱动状态机将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影);这一级一般可以产生无与伦比的快速程序,要达到这一级需要大量修炼的;并且思考时必须放弃很多已有的概念或者这些概念不再重要,比如:变量、指针、空间、函数、对象等,剩下的只应该是那个表驱动状态机; 我想把这种境界描述为:空寂中,一些输入驱动着一个带有状态的机器按设定好的最短路线运转着;除此之外have nothing; 既:把解决一个问题的算法看作一个机器,它有一些可变的状态、有一些记忆、有一些按状态运行的规则,然后一些输入驱动这个机器运转;这就是第三级要求的思考优化问题的切入点,也就是寻找一部机器,使它运行经过的路径最短(可能是速度也可能是空间等等)要掌握一级优化,是很多人经过努力都能够达到的层次,需要的是不断的积累各方面的技巧就行了(虽然很繁琐),写出的代码可以称为“好的代码”;要掌握二级优化,需要的是对问题的理解能力和一些创造力,能够针对问题产生新的见解;写出的代码可以称为“优秀的代码”;要掌握三级优化,必须具有丰富的想象力和创造力,需要大量的修炼和对问题本质的苦苦思索;写出的代码可以称为“非凡的代码”;能够将这三个层级的优化熟练运用(我想把这种境界称作“综级优化”)的人必须掌握比别人更多的知识、了解更多的知识领域、了解最底层的技术和最高层的抽象;并且还要求有丰富的实践经验、想象能力和创造能力; 这些都是不可或缺的;警示:不是所有的代码(项目)都需要优化警示:不是每个人都要去做优化工作警示:优化是有方向和侧重点的,不只是单纯的速度警示:首先是正确,然后才有优化警示:简洁的代码,很多时候就是最好的代码警示:优化不是一种理论,它是一种实践警示:充分优化的笨拙算法实现始终比不上一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论