优化一般思路/模式(三)

来源:互联网 发布:网络暴力的成因 编辑:程序博客网 时间:2024/05/19 02:17

6、 写时拷贝(Write on Copy)

相对于上面叙述的几种优化方法,写时拷贝是一种相对微观的方法。它主要用于需要频繁复制数据或需要复制大量数据时,这时数据的clone操作很费时间。写时拷贝技术在数据需要复制时并不真正进行clone操作--而是直接返回当前数据的引用(或指向当前数据的指针),当其他代码对这段数据进行写操作时,才真正进行clone操作。当然,写时拷贝技术只在数据读取频繁而数据写入稀少的情况下优化效果才较好。Windows的进程创建中就有写时拷贝优化:父进程创建子进程时,子进程自动拥有父进程的一些资源,本来这些资源是需要clone到子进程的,但Windows采取的策略是子进程与父进程拥有同一份资源,直到子进程对其进行修改,此时才进行资源的clone操作。

7、特化

特化就是针对不同的情况编写不同的代码。这听起来会降低代码的灵活性,导致更多重复代码。是的,有的时候性能和灵活性就是鱼和熊掌。某种意义上,C语言是汇编语言的一种抽象,从另一角度看,汇编语言就是C语言在某一平台上的特化。你可以用C语言写出平台无关的代码,但是一般来说C在某平台上的代码效率比此平台上汇编写出来的代码要低。特化比较快的原因中很重要的一点就是,相对于一般化的代码,特化的代码比较扁平,和硬件或某种情况更加接近。特化快的另一个原因是它识别了特殊情况,并利用了特殊情况的某种性质。例如,从一个无序数组中找一个数的算法同样适合于从一个有序数组中找一个数,但是后者有更快的算法。

8、算法优化

这是纯软程序员所能做的最极致的优化。算法的力量就不需要在这里重复了,李开复已经说的够多了。代码优化首先想到的应该是算法优化。在做上面那些优化之前,首先想想自己使用的算法空间复杂度是多少,时间复杂度是多少,是不是有更加有效的算法。算法确实重要,想要修炼的人得好好看看Knuth大爷的The art of ...和算法导论。没时间看的也得知道,即使用枚举了,至少要剪个枝什么的。

9、硬件优化

硬件优化是说把软件该干的事情放到硬件中完成。当然,对于一般程序员来说是没有能力完成这件事情的。不过,我们至少得学会利用好硬件所提供的设施。比如大家所崇拜的卡马克,Quake中传奇般的magic number和快速求平方根法让大家记忆深刻。但在SSE2出来以后,有一条指令可以在2个时钟周期内完成一次单精度平方根运算,把单精度的结果进行两次牛顿迭代,即可得到相应的双精度结果。这条指令使卡大的优化方法失去了现实意义。

总结

优化一般思路和方法总算写完了。无论您是疯狂性能追求者,还是项目所迫需要优化代码以达到需求,希望本系列文章能给您一点帮助。也希望对代码优化感兴趣的朋友们和我探讨相关内容。
(全文完)

 

原创粉丝点击