2009.11.11
经过长达一个月断断续续的阅读之后,将《Efficient C++》这一本书看完了,对于其他的几个实例也实践编程了一把,对于一些机制了解了不少,在看完的这个时刻,写下这篇总结,对于书中的内容做一个小小的总结。不过鉴于现阶段的知识面还不是太丰富,等以后有更好的机会再将这本书好好重温一次。
在书的开头,就介绍了编程时应该考虑到的三大因素:
1.应尽量减少昂贵的I/O
2.函数调用附加的操作也是不容忽视的
3.对象复制是昂贵的
本着这三个原则,这本书主要在几个方面说到这几点:
1.尽量将短小而且经常使用的函数内联,这样虽然会增大程序的大小,但是可以有效地提高程序的运行速度。
2.尽可能地避免对象复制,使用指针,传值等
3.性能第一,设计第二。
看完这本书之后,总结了这本书里面比较重点讲解而且有用的部分,最大的一个是内联机制,这本书花了大量的篇幅去讲解内联的机制,而且怎么样才能更好地使用内联来提高性能。使用内联带来多种的性能提升,但前提是有一个更好的编绎器,其中提到的一个cross-call optimistic ,就是利用传入的输入参数,直接计算出返回结果,而无须再运行函数逻辑。其中,书中也作了很多关于内联在什么情况下使用的实验。最后得到一个表,可以很好地总结了什么时候应该进行内联:
这本书比较重要的第二点是,对于new 与 delete开销的一个分析,其中也开发了多个自我管理内存分配的小程序。对于这几个程序,我也动手实现过了,对于其中使用的自主分配内存方法较有新鲜感,这个过程中,对于底层内存的分配与如何去操控有了更深的了解,是我个人比较喜欢的一个部分,有机会的话写一个底层分配机制来玩一下。
第三个比较重要的点是引用计数那部分,在这一章里面,作者也同样开发了一个引用计数的底层应用,其中使用的面向对象封装覆盖的做法我比较喜欢,也对于内存垃圾回收有了更深的理解,这个例子我也是自己实现并且丰富过,学到不少东西。
第四个比较重要的点是构造函数与析构函数的分析。书中对于构造函数与析构函数的开销做了详尽的分析,也对于如何提高性能给出了有用的建议。也是书中多次反复强调的一点,就是当你用的时候再创建。
第五点是提出了关键路径的概念,指出了一个程序中最常被执行的路径对于程序性能提升的重要性。在书中也多次用到了对于关键路径的优化而对于全局程序的优化作用。
其次还提出了很多小的程序优化建议,这些就不总结了,因为太多太散了,不过在我的阅读笔记本上都有记录,偶尔拿出来翻看一下。
最后两章没有仔细去看与练习,因为自己那方面的基础知识不足,看了之后也不能完全明白理解和吸收,等以后知识上来之后,再重温这两章,估计会有更深的体会。
最后,这本书最重要的是他的分析思想,如何去对于一个机制进行评估,对于一个编程特性进行性能分析,并且最终提出可以优化的思路,这一点是这本书的特色,也指点了我对于一个不了解的领域应该做一翻怎么样的探索。