本书主要针对的是C++程序的性能优化,深入介绍C++程序性能优化的方法和实例。全书由4篇组成,第1篇介绍C++语言的对象模型,该篇是优化C++程序的基础;第2篇主要针对如何优化C++程序的内存使用;第3篇介绍如何优化程序的启动性能;第4篇介绍了三类性能优化工具,即内存分析工具、性能分析工具和I/O检测工具,它们是测量程序性能的利器。本书内容全面,讲解通俗易懂,具有很强的实用性。
本书主要针对的是C++程序的性能优化,深入介绍C++程序性能优化的方法和实例。
全书由4个篇组成,第1篇介绍C++语言的对象模型,该篇是优化C++程序的基础;第2篇主要针对如何优化C++程序的内存使用;第3篇介绍如何优化程序的启动性能;第4篇介绍了三类性能优化工具,即内存分析工具、性能分析工具和I/O检测工具,它们是测量程序性能的利器。
本书适用于有一定C++程序开发经验的开发人员,也可以作为高校相关专业师生的参考书。
第1篇 C++程序优化基础
第1章 C++对象模型 3
1.1 基本概念 4
1.1.1 程序使用内存区 4
1.1.2 全局/静态存储区及常量数据区 7
1.1.3 堆和栈 9
1.1.4 C++中的对象 10
1.2 对象的生命周期 11
1.3 C++对象的内存布局 16
1.3.1 简单对象 17
1.3.2 单继承 20
1.3.3 多继承 23
1.4 构造与析构 33
1.5 本章小结 35
第2章 C++语言特性的性能分析 37
2.1 构造函数与析构函数 39
2.2 继承与虚拟函数 51
2.3 临时对象 61
2.4 内联函数 77
2.5 本章小结 86
第3章 常用数据结构的性能分析 87
3.1 常用数据结构性能分析 88
3.1.1 遍历 93
3.1.2 插入 95
3.1.3 删除 98
3.1.4 排序 101
3.1.5 查找 105
3.2 动态数组的实现及分析 107
3.2.1 动态数组简介 107
3.2.2 动态数组实践及分析 109
3.3 本章小结 116
第2篇 内存使用优化
第4章 操作系统的内存管理 119
4.1 Windows内存管理 120
4.1.1 使用虚拟内存 121
4.1.2 访问虚拟内存时的处理流程 123
4.1.3 虚拟地址到物理地址的映射 126
4.1.4 虚拟内存空间使用状态记录 128
4.1.5 进程工作集 130
4.1.6 Win32内存相关API 132
4.2 Linux内存管理机制 142
4.2.1 进程的内存布局 143
4.2.2 物理内存管理 145
4.2.3 虚拟内存管理 146
4.2.4 虚拟地址映射为物理地址 147
4.3 本章小结 148
第5章 动态内存管理 149
5.1 operator new/delete 150
5.2 自定义全局operator new/delete 155
5.3 自定义类operator new/delete 160
5.4 避免内存泄漏 163
5.5 智能指针 169
5.6 本章小结 181
第6章 内存池 183
6.1 自定义内存池性能优化的原理 184
6.1.1 默认内存管理函数的不足 184
6.1.2 内存池的定义和分类 184
6.1.3 内存池工作原理示例 185
6.2 一个内存池的实现实例 186
6.2.1 内部构造 187
6.2.2 总体机制 188
6.2.3 细节剖析 191
6.2.4 使用方法 202
6.2.5 性能比较 202
6.3 本章小结 203
第3篇 应用程序启动性能优化
第7章 动态链接与动态库 207
7.1 链接技术的发展 208
7.1.1 编译、链接和加载 208
7.1.2 静态链接与静态链接库 211
7.1.3 动态链接与动态库 218
7.2 Windows DLL,Dynamic Linked Library 219
7.2.1 DLL基础 219
7.2.2 DLL如何工作 224
7.2.3 关于DLL的杂项 232
7.3 Linux DSO 233
7.3.1 DSO与ELF 234
7.3.2 DSO如何工作 241
7.3.3 构建与使用DSO 248
7.4 本章小结 260
第8章 程序启动过程 261
8.1 Win32程序启动过程 262
8.2 Linux程序启动过程 266
8.3 影响程序启动性能的因素 267
8.3.1 源代码因素 268
8.3.2 动态链接库因素 269
8.3.3 配置文件/资源文件因素 276
8.3.4 其他因素 277
8.4 本章小结 279
第9章 程序启动性能优化 281
9.1 优化程序启动性能的步骤 282
9.2 测试程序启动性能的方法 283
9.3 优化可执行文件和库文件 286
9.3.1 减少动态链接库的数量 286
9.3.2 减小动态链接库尺寸 288
9.3.3 优化可执行文件和库文件中的代码布局 288
9.4 优化源代码 290
9.4.1 优化启动时读取的配置文件及帮助文件 291
9.4.2 预读频繁访问的文件 291
9.4.3 清除产生exception的代码 293
9.4.4 PreLoad 294
9.4.5 延迟初始化 294
9.4.6 多线程化启动 295
9.5 本章小结 295
第4篇 性能工具
第10章 内存分析工具IBM Rational Purify 299
10.1 Rational Purify工作原理 300
10.2 Rational Purify使用指南 303
10.3 Rational Purify实例分析 308
10.4 本章小结 312
第11章 性能分析工具IBM Rational Quantify 313
11.1 Rational Quantify工作原理 314
11.2 Rational Quantify使用指南 316
11.3 Rational Quantify实例分析 319
11.4 本章小结 324
第12章 实时IO监测工具FileMon 325
12.1 FileMon的工作原理 326
12.2 FileMon使用指南 328
12.3 使用FileMon解决问题 331
12.4 本章小结 334
参考文献 335