|
在计算机发展的早期阶段,硬件资源相对而言是非常昂贵的。不论是CPU时间,还是内存,都给编程人员设置了很大的限制。因此,当时程序对运行性能和内存空间占用的要求是非常严格的。很多开发人员为了减少1%的CPU运行时间或者减少几十个,甚至几个字节而努力。随着计算机技术的快速发展,硬件资源变得相对便宜。因此有的观点认为在开发软件时,软件的性能优化将不再重要,硬件将解决性能问题。但事实上,这种观点是相对片面的。的确,硬件的发展解决了部分软件的性能问题。但随着硬件计算能力的提高,人们对软件功能的要求也越来越高。当今的软件功能越来越复杂,给用户的界面和操作体验也越来越智能和友好,这些需求带来的软件性能上的要求是硬件不能完全解决的。很多实际的项目证明,如果在开发软件时不重视性能的优化,最终虽然实现了功能上的要求,但软件的运行效率低下,也不能给用户带来很好的效益。因此,软件的性能优化是计算机软件开发过程中需要一直关注的重要因素。
程序性能优化的过程
性能优化的第1步是测量,尤其是规模较大,并且比较复杂的软件系统,测量性能数据是进行性能优化的基础。有了真实的数据,才可以进行第2步,即分析数据,从而找到系统真正的瓶颈所在。毫无疑问,优化应该是针对系统的性能瓶颈进行,而找到性能瓶颈应该是建立在真实性能数据的基础上,而不能是主观臆断。现在有很多工具可以辅助进行性能测量和数据分析,本书也会介绍一些这方面工具的使用方法和实践经验。
进行性能优化的核心在于第3步,即分析原因,修改程序,这也将是本书重点介绍的部分。程序的性能包括很多方面,常见的有程序的启动速度,运行速度及运行时占用的内存等。而影响这些性能的因素也很多,大致可以分为如下两类。
- 软件编程设计因素:如算法和数据结构的选择,编程语言的使用等。
- 软件系统结构因素:如动态库/静态库的组织、外部数据的存储及网络环境等。
软件编程设计因素可以看做是程序的内在本质,一般来说,也是对软件性能影响较大的因素。只有对编程语言、算法和数据结构有深入的了解,才能分析出原因,并且找出解决性能问题的方法。本书将针对C++语言,深入介绍C++程序性能优化的方法和实例。
软件系统的结构因素可以看做是程序的外在形式,它们一般和操作系统紧密相关。尤其是现在的软件系统,由于功能复杂,大都采用组件形式,以最大限度地提高可复用性。因此,一般会包含一些动态库/静态库,这些库的组织也会影响到软件系统的性能。本书将针对Windows和Linux介绍动态库和静态库的基本知识及其对软件系统性能的影响。需要指出的是,上面这个优化的过程需要在软件开发的整个过程中不断地迭代进行。而且开始得越早,出现的性能问题越容易解决。
本书的结构
本书主要针对C++程序的性能优化,由4篇组成。第1篇介绍C++语言的对象模型,与性能有关的语言特性及一些数据结构的性能,本篇是C++程序优化的基础。
第2篇主要介绍C++程序内存使用的优化。内存无疑是影响程序性能的重要因素,很多程序由于没有采用正确的方法分配和使用内存,不仅占用内存较多,而且运行效率不高。在本篇中将结合一些操作系统的内存管理机制介绍如何在特定的平台下进行内存优化。此外,还将深入介绍C++语言管理动态内存的机制和方法,并介绍一个常用的内存管理方法,即内存池的实现。
第3篇介绍程序启动性能的优化。程序的启动性能不仅受到软件编程设计因素的影响,也会受到系统结构因素的影响,尤其是动态库的影响。本篇将首先介绍动态库的基本知识,然后介绍一些程序启动性能优化的具体方法。
"工欲善其事,必先利其器",好的工具会大大提高程序性能优化的效率。第4篇将介绍3类性能工具,即内存分析工具、性能分析工具和I/O检测工具,它们是性能测量和分析的利器。
本书适用于有一定C++开发经验的开发人员,也可以作为高等院校相关专业师生的参考书。
致 谢
本书是集体创作的结晶,在此感谢大家出色的协作精神。本书的写作也占用了大家大量的休息、娱乐,以及和家人在一起的时间,所以在此感谢作者们家人的理解和支持。同时,在成书的过程中与许多人的关怀、鼓励和支持密不可分,其中包括CDL总裁Josephine,律师Andrew,Director Dennis,资深经理Debbi 和Cindy,研发经理阎小兵和扈晓炜等,在此表示感谢。最后,特别感谢出版社的有关领导、协调人员及编辑,没有他们的支持和参与,本书的出版是不可能的。
由于时间仓促、水平有限,书中难免有许多不妥、甚至错误之处。在此敬请读者不吝指出,我们将愿意与读者共同探讨,并不胜感激。
阅读本图书的目录及样本章节 >
|