C++应用程序性能优化(第2版)
基本信息
编辑推荐
畅销书升级版
系统介绍性能优化的工作流程,方法论,C++性能特性,分析工具等,并配合大量最佳实践及代码实例。
内容简介回到顶部↑
作译者回到顶部↑
本书提供作译者介绍
冯宏华,清华大学计算机科学与技术系硕士。IBM中国开发中心高级软件工程师。2003年12月加入IBM中国开发中心,主要从事1BM产品的开发、性能优化等工作。兴趣包括C/C++应用程序性能调优,Windows应用程序开发,Web应用程序开发等。
徐莹,山东大学计算机科学与技术系硕士。2003年4月加入IBM中国开发中心,现任IBM中国开发中心开发经理,一直从事IBM软件产品在多个操作系统平台上的开发工作。曾参与IBM产品在Windows和Linux平台上的性能优化工作,对C/C++编程语言和跨平台的大型软件系统的开发有较.. << 查看详细
徐莹,山东大学计算机科学与技术系硕士。2003年4月加入IBM中国开发中心,现任IBM中国开发中心开发经理,一直从事IBM软件产品在多个操作系统平台上的开发工作。曾参与IBM产品在Windows和Linux平台上的性能优化工作,对C/C++编程语言和跨平台的大型软件系统的开发有较.. << 查看详细
目录回到顶部↑
第1篇 应用程序性能优化概述
第1章 应用程序性能优化概述 2
1.1 应用程序性能的定义 2
1.2 性能基准 3
1.2.1 基准负载 3
1.2.2 基准用例 4
1.2.3 性能基准的运行 5
1.2.4 性能基准结果 6
1.3 性能分析方法概述 7
1.4 性能优化方法概述 9
1.5 本章小结 10
第2篇 c++程序优化基础
第2章 c++对象模型 12
2.1 基本概念 12
2.1.1 程序使用内存区 12
2.1.2 全局/静态存储区及常量数据区 15
2.1.3 堆和栈 16
2.1.4 c++中的对象 18
2.2 对象的生命周期 18
2.3 c++对象的内存布局 23
第1章 应用程序性能优化概述 2
1.1 应用程序性能的定义 2
1.2 性能基准 3
1.2.1 基准负载 3
1.2.2 基准用例 4
1.2.3 性能基准的运行 5
1.2.4 性能基准结果 6
1.3 性能分析方法概述 7
1.4 性能优化方法概述 9
1.5 本章小结 10
第2篇 c++程序优化基础
第2章 c++对象模型 12
2.1 基本概念 12
2.1.1 程序使用内存区 12
2.1.2 全局/静态存储区及常量数据区 15
2.1.3 堆和栈 16
2.1.4 c++中的对象 18
2.2 对象的生命周期 18
2.3 c++对象的内存布局 23
前言回到顶部↑
在计算机发展的早期阶段,硬件资源相对而言是非常昂贵的。不论是CPU运行时间,还是内存容量,都给编程人员设置了很大的限制。因此,当时程序对运行性能和内存空间占用的要求是非常严格的。很多开发人员为了减少1%的CPU运行时间,为减少几十个,甚至几个字节而孜孜努力。随着计算机技术的快速发展,硬件资源变得相对便宜。因此有的观点认为在开发软件时,软件的性能优化将不再重要,硬件将解决性能问题。但事实上,这种观点是相对片面的。的确,硬件的发展解决了部分软件的性能问题。但随着硬件计算能力的提高,人们对软件功能的要求也越来越高。当今的软件功能越来越复杂,给用户的界面和操作体验也越来越智能和友好,这些需求带来的软件性能上的要求是硬件不能完全解决的。很多实际的项目证明,如果在开发软件时不重视性能的优化,最终虽然实现了功能上的要求,但软件的运行效率低下,也不能给用户带来很好的效益。因此,软件的性能优化是计算机软件开发过程中需要一直关注的重要因素。
程序性能优化的过程
从开发过程的角度来看,程序的性能优化流程一般如下图所示。
性能优化的第1步是测量,尤其是规模较大,并且比较复杂的软件系统,测量性能数据是进行性能优化的基础。有了真实的数据,才可以进行第2步,即分析数据,从而找到系统真正的瓶颈所在。毫无疑问,优化应该是针对系统的性能瓶颈进行的,而找到性能瓶颈应该是建立在真实性能数据的基础上的,而不能是主观臆断。现在有很多工具可以辅助进行性能测量和数据分析,本书也会介绍一些这方面工具的使用方法和实践经验。
进行性能优化的核心在于第3步,即分析原因,修改程序,这也将是本书重点介绍的部分。程序的性能包括很多方面,常见的有程序的启动速度、运行速度及运行时占用的内存等。而影响这些性能的因素也很多,大致可以分为如下两类。
软件编程设计因素:如算法和数据结构的选择、编程语言的使用等。
软件系统结构因素:如动态库/静态库的组织、外部数据的存储及网络环境等。
软件编程设计因素可以看做是程序的内在本质,一般来说,也是对软件性能影响较大的因素。只有对编程语言、算法和数据结构有深入的了解,才能分析出原因,并且找出解决性能问题的方法。本书将针对C++语言,深入介绍C++程序性能优化的方法和实例。
软件系统的结构因素可以看做是程序的外在形式,它们一般和操作系统紧密相关。尤其是现在的软件系统,由于功能复杂,大都采用组件形式,以最大限度地提高可复用性。因此,一般会包含一些动态库/静态库,这些库的组织也会影响到软件系统的性能。本书将针对Windows和Linux介绍动态库和静态库的基本知识及其对软件系统性能的影响。需要指出的是,上面这个优化的过程需要在软件开发的整个过程中不断地迭代进行。而且开始得越早,出现的性能问题越容易解决。
本书的结构
本书主要针对C++程序的性能优化,由5篇组成。第1篇概述了应用程序性能优化工作的基本概念、总流程和方法论,是对性能优化的全局性介绍。
第2篇介绍C++语言的对象模型,与性能有关的语言特性及一些数据结构的性能,本篇是C++程序优化的基础。
第3篇主要介绍C++程序内存使用的优化。内存无疑是影响程序性能的重要因素,很多程序由于没有采用正确的方法分配和使用内存,不仅占用内存较多,而且运行效率不高。在本篇中将结合一些操作系统的内存管理机制介绍如何在特定的平台下进行内存优化。此外,还将深入介绍C++语言管理动态内存的机制和方法,并介绍一个常用的内存管理方法,即内存池的实现。
第4篇介绍程序启动性能的优化。程序的启动性能不仅受到软件编程设计因素的影响,也会受到系统结构因素的影响,尤其是动态库的影响。本篇将首先介绍动态库的基本知识,然后介绍一些程序启动性能优化的具体方法。
“工欲善其事,必先利其器”,好的工具会大大提高程序性能优化的效率。第5篇将介绍3类性能工具,即内存分析工具、性能分析工具和I/O检测工具,它们是性能测量和分析的利器。
本书适用于有一定C++开发经验的开发人员,也可以作为高等院校相关专业师生的参考书。
致谢
本书是集体创作的结晶,在此感谢大家出色的协作精神。本书的写作也占用了大家大量的休息、娱乐,以及和家人在一起的时间,所以在此感谢作者们家人的理解和支持。同时,在成书的过程中与许多人的关怀、鼓励和支持密不可分,其中包括CDL总裁Josephine,律师Andrew,Director Dennis,资深经理Debbi 和Cindy,研发经理阎小兵和扈晓炜等,在此表示感谢。最后,特别感谢出版社的有关领导、协调人员及编辑,没有他们的支持和参与,本书的出版是不可能的。
由于时间仓促、水平有限,书中难免有许多不妥、甚至错误之处。在此敬请读者不吝指出,我们将愿意与读者共同探讨,并不胜感激。
程序性能优化的过程
从开发过程的角度来看,程序的性能优化流程一般如下图所示。
性能优化的第1步是测量,尤其是规模较大,并且比较复杂的软件系统,测量性能数据是进行性能优化的基础。有了真实的数据,才可以进行第2步,即分析数据,从而找到系统真正的瓶颈所在。毫无疑问,优化应该是针对系统的性能瓶颈进行的,而找到性能瓶颈应该是建立在真实性能数据的基础上的,而不能是主观臆断。现在有很多工具可以辅助进行性能测量和数据分析,本书也会介绍一些这方面工具的使用方法和实践经验。
进行性能优化的核心在于第3步,即分析原因,修改程序,这也将是本书重点介绍的部分。程序的性能包括很多方面,常见的有程序的启动速度、运行速度及运行时占用的内存等。而影响这些性能的因素也很多,大致可以分为如下两类。
软件编程设计因素:如算法和数据结构的选择、编程语言的使用等。
软件系统结构因素:如动态库/静态库的组织、外部数据的存储及网络环境等。
软件编程设计因素可以看做是程序的内在本质,一般来说,也是对软件性能影响较大的因素。只有对编程语言、算法和数据结构有深入的了解,才能分析出原因,并且找出解决性能问题的方法。本书将针对C++语言,深入介绍C++程序性能优化的方法和实例。
软件系统的结构因素可以看做是程序的外在形式,它们一般和操作系统紧密相关。尤其是现在的软件系统,由于功能复杂,大都采用组件形式,以最大限度地提高可复用性。因此,一般会包含一些动态库/静态库,这些库的组织也会影响到软件系统的性能。本书将针对Windows和Linux介绍动态库和静态库的基本知识及其对软件系统性能的影响。需要指出的是,上面这个优化的过程需要在软件开发的整个过程中不断地迭代进行。而且开始得越早,出现的性能问题越容易解决。
本书的结构
本书主要针对C++程序的性能优化,由5篇组成。第1篇概述了应用程序性能优化工作的基本概念、总流程和方法论,是对性能优化的全局性介绍。
第2篇介绍C++语言的对象模型,与性能有关的语言特性及一些数据结构的性能,本篇是C++程序优化的基础。
第3篇主要介绍C++程序内存使用的优化。内存无疑是影响程序性能的重要因素,很多程序由于没有采用正确的方法分配和使用内存,不仅占用内存较多,而且运行效率不高。在本篇中将结合一些操作系统的内存管理机制介绍如何在特定的平台下进行内存优化。此外,还将深入介绍C++语言管理动态内存的机制和方法,并介绍一个常用的内存管理方法,即内存池的实现。
第4篇介绍程序启动性能的优化。程序的启动性能不仅受到软件编程设计因素的影响,也会受到系统结构因素的影响,尤其是动态库的影响。本篇将首先介绍动态库的基本知识,然后介绍一些程序启动性能优化的具体方法。
“工欲善其事,必先利其器”,好的工具会大大提高程序性能优化的效率。第5篇将介绍3类性能工具,即内存分析工具、性能分析工具和I/O检测工具,它们是性能测量和分析的利器。
本书适用于有一定C++开发经验的开发人员,也可以作为高等院校相关专业师生的参考书。
致谢
本书是集体创作的结晶,在此感谢大家出色的协作精神。本书的写作也占用了大家大量的休息、娱乐,以及和家人在一起的时间,所以在此感谢作者们家人的理解和支持。同时,在成书的过程中与许多人的关怀、鼓励和支持密不可分,其中包括CDL总裁Josephine,律师Andrew,Director Dennis,资深经理Debbi 和Cindy,研发经理阎小兵和扈晓炜等,在此表示感谢。最后,特别感谢出版社的有关领导、协调人员及编辑,没有他们的支持和参与,本书的出版是不可能的。
由于时间仓促、水平有限,书中难免有许多不妥、甚至错误之处。在此敬请读者不吝指出,我们将愿意与读者共同探讨,并不胜感激。
序言回到顶部↑
去国离家十六载后,2006年,当我再次归来凝视上海这座不夜城时,不由地感慨世界真的变小了、变平了,中国作为地球村的一员,正以惊人的速度发展变化着。
世界正改变着中国,中国也不断影响着世界。在备感欣喜振奋之余,我亦常常思索,在一个越来越小、越来越平的世界里,中国会面对怎样的挑战和机遇?IBM作为全球最大的信息技术和行业解决方案公司,又在哪些方面可以与中国分享我们的先进技术、经验与创新为要的精神呢?
中国自2001年入世以后,很多企业开始迅速发展,创造出了许多新的发展模式。但是,中国、中国的企业在做大做强并开始走向世界的过程中也面临着越来越多的挑战。如何拥有更多更强的创新能力?如何提升中国在全球一体化经济格局中的竞争力?如何增强企业的可持续发展能力并逐渐走向领袖地位?这应该是很多中国企业共同面对并思考的问题。
百年来,创新求变是IBM公司虽历经艰难仍屡铸辉煌的关键。因而,IBM公司虽多次转型,却始终以超前的技术、出色的管理和独树一帜的产品领导着全球信息技术的发展,保证了世界范围内几乎所有行业用户对信息处理的全方位需求。关于创新,我们有很多的经验愿与中国业界分享。
中国开发中心(China Development Lab,简称CDL)是IBM在中国的窗口,是中国IT产业与世界交流的桥梁。CDL不仅把全球先进技术引入中国,也将中国领先的技术与行业解决方案推向世界。经过十年的蓬勃发展,CDL已经拥有5000名软件开发人员,成为IBM全球规模最大的软件开发基地之一,并成为跨国公司在中国最大的软件开发机构。十年来,一批又一批中国本土的人才,在CDL提供的平台上施展才华,并逐渐成长为技术与管理精英。
我们始终恪守着“中国人才、国际管理;中国创造、服务全球”的理念,希望将IBM的最新技术、创新和管理心得与大家共同分享,并鼓励CDL的专家走出实验室。于是,我们有幸选择了实力非凡、专业创新的电子工业出版社博文视点公司作为合作伙伴,推出这一系列丛书。该丛书的作者包括来自CDL WebSphere、Information Management、Lotus、Rational、Tivoli五大软件产品开发团队,以及来自中国开发中心新兴技术学院(Emerging Technology Institute)、行业解决方案中心(Industry Solution Labs)、软件服务团队(Software Service)等各个部门的优秀架构师、资深工程师、管理者,范围将涵盖从开发理论及平台、方法论及实践、项目管理、最新软件技术与产品、先进行业解决方案架构,到最新技术标准和前沿技术发展趋势甚至创新的商业模式探讨等诸多方面。
我希望这套丛书能把我们一线专家宝贵的经验、见解呈现给读者。在与业界分享经验和世界最新技术及趋势的同时,我们希望能为推动中国IT产业的加速发展奉献微薄之力。IBM中国开发中心将一如既往地同业界同仁一起,共铸中国信息产业的辉煌明天!
王阳 博士
IBM全球副总裁兼中国开发中心总经理
世界正改变着中国,中国也不断影响着世界。在备感欣喜振奋之余,我亦常常思索,在一个越来越小、越来越平的世界里,中国会面对怎样的挑战和机遇?IBM作为全球最大的信息技术和行业解决方案公司,又在哪些方面可以与中国分享我们的先进技术、经验与创新为要的精神呢?
中国自2001年入世以后,很多企业开始迅速发展,创造出了许多新的发展模式。但是,中国、中国的企业在做大做强并开始走向世界的过程中也面临着越来越多的挑战。如何拥有更多更强的创新能力?如何提升中国在全球一体化经济格局中的竞争力?如何增强企业的可持续发展能力并逐渐走向领袖地位?这应该是很多中国企业共同面对并思考的问题。
百年来,创新求变是IBM公司虽历经艰难仍屡铸辉煌的关键。因而,IBM公司虽多次转型,却始终以超前的技术、出色的管理和独树一帜的产品领导着全球信息技术的发展,保证了世界范围内几乎所有行业用户对信息处理的全方位需求。关于创新,我们有很多的经验愿与中国业界分享。
中国开发中心(China Development Lab,简称CDL)是IBM在中国的窗口,是中国IT产业与世界交流的桥梁。CDL不仅把全球先进技术引入中国,也将中国领先的技术与行业解决方案推向世界。经过十年的蓬勃发展,CDL已经拥有5000名软件开发人员,成为IBM全球规模最大的软件开发基地之一,并成为跨国公司在中国最大的软件开发机构。十年来,一批又一批中国本土的人才,在CDL提供的平台上施展才华,并逐渐成长为技术与管理精英。
我们始终恪守着“中国人才、国际管理;中国创造、服务全球”的理念,希望将IBM的最新技术、创新和管理心得与大家共同分享,并鼓励CDL的专家走出实验室。于是,我们有幸选择了实力非凡、专业创新的电子工业出版社博文视点公司作为合作伙伴,推出这一系列丛书。该丛书的作者包括来自CDL WebSphere、Information Management、Lotus、Rational、Tivoli五大软件产品开发团队,以及来自中国开发中心新兴技术学院(Emerging Technology Institute)、行业解决方案中心(Industry Solution Labs)、软件服务团队(Software Service)等各个部门的优秀架构师、资深工程师、管理者,范围将涵盖从开发理论及平台、方法论及实践、项目管理、最新软件技术与产品、先进行业解决方案架构,到最新技术标准和前沿技术发展趋势甚至创新的商业模式探讨等诸多方面。
我希望这套丛书能把我们一线专家宝贵的经验、见解呈现给读者。在与业界分享经验和世界最新技术及趋势的同时,我们希望能为推动中国IT产业的加速发展奉献微薄之力。IBM中国开发中心将一如既往地同业界同仁一起,共铸中国信息产业的辉煌明天!
王阳 博士
IBM全球副总裁兼中国开发中心总经理
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· C/C++ 经典著作(《C专家编程》《C++ Templates中文版》《C和指针 》《C陷阱与缺陷》《C++沉思录》)








点击看大图





加载中...

