- 1
- 0
- 约5.56千字
- 约 36页
- 2020-06-11 发布于天津
- 举报
程序优化介绍( c 语言) 培训的对象 ? C 语言熟手 ? 对优化感兴趣的 ? 想培训又不愿看文档,想有人讲给你听的。 ? 想成为编程狂人的 ? 想成为性能狂人的 ? 相信优化是不必要的,或者认为优化应该交由 编译器完成的 为什么要程序优化 ? 一个优秀程序员的必要素养。 ? 编译器还不代替人工操作的程序优化 。 ? 低层程序需要优化。 ? 同样的 DSP 能跑出更多的功能。 ? …… ? ??? ? !!!优化还需要理由吗 程序优化的三个级别 ? 第一级:代码级 ? 第二级:算法级 ? 第三级:表驱动状态机 代码级优化 ? 代码调整是一种局部的思维方式;基本上不触及算法层级;它面 向的是代码,而不是问题; ? 语句调整,用汇编重写、指令调整、换一种语言实现、换一个编 译器、循环展开、参数传递优化等都属于这一级; ? 这个级别的优化需要掌握大量的小的优化技巧和知识,需要不断 的积累; ? 简单的语句调整、公共表达式提取、废代码删除等当前的很多编 译器也能做到了,但也需要了解一些编译器的优化能力使自己的 代码配合编译器做好优化; ? 用汇编重写并不是简单把高级语言改写为汇编实现,那样写的汇 编很可能没有当今的编译器产生的代码好,所以如果决定用汇编 实现,那就应该按照汇编的角度来规划自己的实现,适当的参考 编译器生成的汇编码也是可取的 ( 特别是新手,我也一样 ) ;在某些 领域,使用 CPU 的新特性和新的指令集等将产生巨大的性能收益, 这些地方经常采用汇编来实现。 算法级优化 ? 算法级优化强调的重点是针对问题的算法;即选择和 构造适合于问题的算法;(冒泡排序还是快排的选择 问题是这一级早就应该完成的)很多经典算法都对问 题作了一些假设 ( 包括我们当前已经完成的算法实现 ) , 而在面对实际问题时“新的视角”提示我们应该重新 检视这些假设,并尝试不同的思考问题的角度,寻求 适合于问题的新算法; ? 发掘问题的本来意义,从不同的角度思考面对的问题, 使用适合于问题的的算法 ; 尝试打破一些规则,发掘 和怀疑自己的某些假定,恢复问题的本来面目; 表驱动状态机 ? 将问题抽象为另一种等价的数学模型或假想机器模型, 比如构造出某种表驱动状态机;这一级其实是第二级 的延伸,只是产生的效果更加明显,但它有其本身的 特点(任何算法和优化活动都可以看作是他的投影); 这一级一般可以产生无与伦比的快速程序, ? 要达到这一级需要大量修炼的 ; 并且思考时必须放 弃很多已有的概念或者这些概念不再重要,比如:变 量、指针、空间、函数、对象等,剩下的只应该是那 个表驱动状态机; 我想把这种境界描述为:空寂中, 一些输入驱动着一个带有状态的机器按设定好的最短 路线运转着;除此之外 have nothing; 既:把解决一个 问题的算法看作一个机器,它有一些可变的状态、有 一些记忆、有一些按状态运行的规则,然后一些输入 驱动这个机器运转;这就是第三级要求的思考优化问 题的切入点,也就是寻找一部机器,使它运行经过的 路径最短 ( 可能是速度也可能是空间等等 ) 第一级优化 ? 要掌握一级优化,是很多人经过努力都能够达 到的层次,需要的是不断的积累各方面的技巧 就行了 ( 虽然很繁琐 ) ,写出的代码可以称为 “好的代码”; ? 手中无剑、心中有剑; 第二级优化 ? 要掌握二级优化,需要的是对问题的理解能力 和一些创造力,能够针对问题产生新的见解; 写出的代码可以称为“优秀的代码”; ? 手中有剑;心中亦有剑 ; 第三级优化 ? 要掌握三级优化,必须具有丰富的想象力和创 造力,需要大量的修炼和对问题本质的苦苦思 索;写出的代码可以称为“非凡的代码”; ? 手中无剑、心中亦无剑; 无级 ? 能够将这三个层级的优化熟练运用 ( 我想把这 种境界称作“综级优化” ) 的人必须掌握比别 人更多的知识、了解更多的知识领域、了解最 底层的技术和最高层的抽象;并且还要求有丰 富的实践经验、想象能力和创造能力 ; 这些都 是不可或缺的; ? 就是不杀,就是和平 警示 1 ? 警示:不是所有的代码 ( 项目 ) 都需要优化 ? 警示:不是每个人都要去做优化工作 ? 警示:优化是有方向和侧重点的,不只是单纯 的速度 ? 警示:首先是正确,然后才有优化 ? 警示:简洁的代码,很多时候就是最好的代码 警示 2 ? 警示:优化不是一种理论,它是一种实践 ? 警示:充分优化的笨拙算法实现始终比不上一个更好 的算法的
原创力文档

文档评论(0)