图书介绍
C++性能优化指南PDF|Epub|txt|kindle电子书版本网盘下载
![C++性能优化指南](https://www.shukui.net/cover/65/34505151.jpg)
- (美)柯尔特·甘瑟尔罗斯(Kurt Guntheroth) 著
- 出版社: 北京:人民邮电出版社
- ISBN:9787115471390
- 出版时间:2018
- 标注页数:282页
- 文件大小:34MB
- 文件页数:306页
- 主题词:C语言-程序设计-指南
PDF下载
下载说明
C++性能优化指南PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 优化概述1
1.1优化是软件开发的一部分2
1.2优化是高效的3
1.3优化是没有问题的3
1.4这儿一纳秒,那儿一纳秒5
1.5 C++代码优化策略总结5
1.5.1用好的编译器并用好编译器6
1.5.2使用更好的算法7
1.5.3使用更好的库8
1.5.4减少内存分配和复制9
1.5.5移除计算9
1.5.6使用更好的数据结构9
1.5.7提高并发性10
1.5.8优化内存管理10
1.6小结10
第2章 影响优化的计算机行为11
2.1 C++所相信的计算机谎言12
2.2计算机的真相12
2.2.1内存很慢13
2.2.2内存访问并非以字节为单位13
2.2.3某些内存访问会比其他的更慢14
2.2.4内存字分为大端和小端14
2.2.5内存容量是有限的15
2.2.6指令执行缓慢16
2.2.7计算机难以作决定16
2.2.8程序执行中的多个流16
2.2.9调用操作系统的开销是昂贵的18
2.3 C++也会说谎18
2.3.1并非所有语句的性能开销都相同18
2.3.2语句并非按顺序执行18
2.4小结19
第3章 测量性能20
3.1优化思想21
3.1.1必须测量性能21
3.1.2优化器是王牌猎人21
3.1.3 90/10规则22
3.1.4阿姆达尔定律23
3.2进行实验24
3.2.1记实验笔记26
3.2.2测量基准性能并设定目标26
3.2.3你只能改善你能够测量的28
3.3分析程序执行28
3.4测量长时间运行的代码30
3.4.1一点关于测量时间的知识30
3.4.2用计算机测量时间35
3.4.3克服测量障碍41
3.4.4创建stopwatch类44
3.4.5使用测试套件测量热点函数48
3.5评估代码开销来找出热点代码48
3.5.1评估独立的C+++语句的开销49
3.5.2评估循环的开销49
3.6其他找出热点代码的方法51
3.7小结51
第4章 优化字符串的使用:案例研究53
4.1为什么字符串很麻烦53
4.1.1字符串是动态分配的54
4.1.2字符串就是值54
4.1.3字符串会进行大量复制55
4.2第一次尝试优化字符串56
4.2.1使用复合赋值操作避免临时字符串57
4.2.2通过预留存储空间减少内存的重新分配57
4.2.3消除对参数字符串的复制58
4.2.4使用迭代器消除指针解引59
4.2.5消除对返回的字符串的复制59
4.2.6用字符数组代替字符串60
4.2.7第一次优化总结62
4.3第二次尝试优化字符串62
4.3.1使用更好的算法62
4.3.2使用更好的编译器64
4.3.3使用更好的字符串库64
4.3.4使用更好的内存分配器67
4.4消除字符串转换69
4.4.1将C字符串转换为std::string69
4.4.2不同字符集间的转换70
4.5小结70
第5章 优化算法71
5.1算法的时间开销72
5.1.1最优情况、平均情况和最差情况的时间开销74
5.1.2摊销时间开销74
5.1.3其他开销75
5.2优化查找和排序的工具箱75
5.3高效查找算法75
5.3.1查找算法的时间开销75
5.3.2当n很小时,所有算法的时间开销都一样76
5.4高效排序算法77
5.4.1排序算法的时间开销77
5.4.2替换在最差情况下性能较差的排序算法77
5.4.3利用输入数据集的已知特性78
5.5优化模式78
5.5.1预计算79
5.5.2延迟计算80
5.5.3批量处理80
5.5.4缓存80
5.5.5特化81
5.5.6提高处理量81
5.5.7提示81
5.5.8优化期待路径82
5.5.9散列法82
5.5.10双重检查82
5.6小结82
第6章 优化动态分配内存的变量83
6.1 C++变量回顾84
6 1.1变量的存储期84
6.1.2变量的所有权86
6.1.3值对象与实体对象86
6.2 C++动态变量API回顾88
6.2.1使用智能指针实现动态变量所有权的自动化90
6.2.2动态变量有运行时开销92
6.3减少动态变量的使用92
6.3.1静态地创建类实例92
6.3.2使用静态数据结构93
6.3.3使用std::make_ shared替代new表达式97
6.3.4不要无谓地共享所有权97
6.3.5使用“主指针”拥有动态变量98
6.4减少动态变量的重新分配99
6.4.1预分配动态变量以防止重新分配99
6.4.2在循环外创建动态变量99
6.5移除无谓的复制100
6.5.1在类定义中禁止不希望发生的复制101
6.5.2移除函数调用上的复制102
6.5.3移除函数返回上的复制103
6.5.4免复制库105
6.5.5实现写时复制惯用法106
6.5.6切割数据结构106
6.6实现移动语义107
6.6.1非标准复制语义:痛苦的实现107
6.6.2 std::swap():“穷人”的移动语义108
6.6.3共享所有权的实体109
6.6.4移动语义的移动部分109
6.6.5更新代码以使用移动语义110
6.6.6移动语义的微妙之处111
6.7扁平数据结构113
6.8小结113
第7章 优化热点语句115
7.1从循环中移除代码116
7.1.1缓存循环结束条件值117
7.1.2使用更高效的循环语句117
7.1.3用递减替代递增118
7.1.4从循环中移除不变性代码118
7.1.5从循环中移除无谓的函数调用119
7.1.6从循环中移除隐含的函数调用121
7.1.7从循环中移除昂贵的、缓慢改变的调用123
7.1.8将循环放入函数以减少调用开销123
7.1.9不要频繁地进行操作124
7.1.10其他优化技巧126
7.2从函数中移除代码126
7.2.1函数调用的开销126
7.2.2简短地声明内联函数129
7.2.3在使用之前定义函数129
7.2.4移除未使用的多态性130
7.2.5放弃不使用的接口130
7.2.6用模板在编译时选择实现133
7.2.7避免使用PIMPL惯用法134
7.2.8移除对DDL的调用135
7.2.9使用静态成员函数取代成员函数136
7.2.10将虚析构函数移至基类中136
7.3优化表达式137
7.3.1简化表达式137
7.3.2将常量组合在一起138
7.3.3使用更高效的运算符139
7.3.4使用整数计算替代浮点型计算139
7.3.5双精度类型可能会比浮点型更快140
7.3.6用闭形式替代迭代计算141
7.4优化控制流程惯用法142
7.4.1用switch替代if-else if-else142
7.4.2用虚函数替代switch或if143
7.4.3使用无开销的异常处理144
7.5小结145
第8章 使用更好的库146
8.1优化标准库的使用146
8.1.1 C+++标准库的哲学147
8.1.2使用C+++标准库的注意事项147
8.2优化现有库149
8.2.1改动越少越好149
8.2.2添加函数,不要改动功能150
8.3设计优化库150
8.3.1草率编码后悔多150
8.3.2在库的设计上,简约是一种美德151
8.3.3不要在库内分配内存152
8.3.4若有疑问,以速度为准152
8.3.5函数比框架更容易优化152
8.3.6扁平继承层次关系153
8.3.7扁平调用链153
8.3.8扁平分层设计153
8.3.9避免动态查找154
8.3.10留意“上帝函数”155
8.4小结156
第9章 优化查找和排序157
9.1使用std: :map和std::string的键值对表158
9.2改善查找性能的工具箱159
9.2.1进行一次基准测量160
9.2.2识别出待优化的活动160
9.2.3分解待优化的活动160
9.2.4修改或替换算法和数据结构161
9.2.5在自定义抽象上应用优化过程162
9.3优化std: :map的查找163
9.3.1以固定长度的字符数组作为std: :map的键163
9.3.2以C风格的字符串组作为键使用std: :map164
9.3.3当键就是值的时候,使用map的表亲std::set166
9.4使用〈algorithm〉头文件优化算法167
9.4.1以序列容器作为被查找的键值对表168
9.4.2 std::find():功能如其名,O(n)时间开销169
9.4.3 std::binary_search():不返回值169
9.4.4使用std::equal_range()的二分查找170
9.4.5使用std::lower_ bound()的二分查找170
9.4.6自己编写二分查找法171
9.4.7使用strcmp()自己编写二分查找法172
9.5优化键值对散列表中的查找173
9.5.1使用std::unordered_ map进行散列173
9.5.2对固定长度字符数组的键进行散列174
9.5.3以空字符结尾的字符串为键进行散列175
9.5.4用自定义的散列表进行散列176
9.6斯特潘诺夫的抽象惩罚177
9.7使用C++标准库优化排序178
9.8小结179
第10章 优化数据结构181
10.1理解标准库容器181
10.1.1序列容器182
10.1.2关联容器182
10.1.3测试标准库容器183
10.2 std::vector与std::string187
10.2.1重新分配的性能影响188
10.2.2 std: :vector中的插入与删除188
10.2.3遍历std::vector190
10.2.4对std::vector排序191
10.2.5查找std::vector191
10.3 std::deque191
10.3.1 std::deque中的插入和删除193
10.3.2遍历std: :deque194
10.3.3对std::deque的排序194
10.3.4查找std: :deque194
10.4 std::list194
10.4.1 std: :list中的插入和删除196
10.4.2遍历std: :list中197
10.4.3对std :list排序197
10.4.4查找std::list197
10.5 std::forward list198
10.5.1 std::forward_ list中的插入和删除199
10.5.2遍历std::forward_ list199
10.5.3对std::forward_ list排序199
10.5.4查找std::forward- list199
10.6 std::map与std: : multimap199
10.6.1 std: :map中的插入和删除200
10.6.2遍历std: :map202
10.6.3对std: :map排序202
10.6.4查找std: :map203
10.7 std::set与 std::multiset203
10.8 std::unordered_map与std::unordered_multimap204
10.8.1 std::unordered_ map中的插入与删除206
10.8.2遍历std::unordered- map207
10.8.3查找std::unordered_ map207
10.9其他数据结构208
10.10小结209
第11章 优化I/O210
11.1读取文件的秘诀210
11.1.1创建一个吝啬的函数签名211
11.1.2缩短调用链213
11.1.3减少重新分配213
11.1.4更大的吞吐量——使用更大的输入缓冲区215
11.1.5更大的吞吐量——一次读取一行216
11.1.6再次缩短函数调用链217
11.1.7无用的技巧218
11.2写文件219
11.3从std: :cin读取和向std::cout中写入220
11.4小结220
第12章 优化并发221
12.1复习并发222
12.1.1并发概述222
12.1.2交叉执行226
12.1.3顺序一致性226
12.1.4竞争227
12.1.5同步228
12.1.6原子性228
12.2复习C++并发方式230
12.2.1线程230
12.2.2 promise和future231
12.2.3异步任务233
12.2.4互斥量234
12.2.5锁235
12.2.6条件变量236
12.2.7共享变量上的原子操作238
12.2.8展望未来的C+++并发特性240
12.3优化多线程C++程序241
12.3.1用std::async替代std::thread242
12.3.2创建与核心数量一样多的可执行线程243
12.3.3实现任务队列和线程池244
12.3.4在单独的线程中执行I/O245
12.3.5没有同步的程序245
12.3.6移除启动和停止代码247
12.4让同步更加高效248
12.4.1减小临界区的范围248
12.4.2限制并发线程的数量249
12.4.3避免惊群250
12.4.4避免锁护送250
12.4.5减少竞争250
12.4.6不要在单核系统上繁忙等待251
12.4.7不要永远等待252
12.4.8自己设计互斥量可能会低效252
12.4.9限制生产者输出队列的长度252
12.5并发库253
12.6小结254
第13章 优化内存管理255
13.1复习C++内存管理器API255
13.11动态变量的生命周期256
13.1.2内存管理函数分配和释放内存256
13.1.3 new表达式构造动态变量259
13.1.4 delete表达式处置动态变量261
13.1.5显式析构函数调用销毁动态变量262
13.2高性能内存管理器263
13.3提供类专用内存管理器264
13.3.1分配固定大小内存的内存管理器265
13.3.2内存块分配区267
13.3.3添加一个类专用new()运算符269
13.3.4分配固定大小内存块的内存管理器的性能270
13.3.5分配固定大小内存块的内存管理器的变化形式270
13.3.6非线程安全的内存管理器是高效的271
13.4自定义标准库分配器271
13.4.1最小C+++11分配器273
13.4.2 C+++98分配器的其他定义274
13.4.3一个分配固定大小内存块的分配器278
13.4.4字符串的分配固定大小内存块的分配器279
13.5小结281
作者介绍282
封面介绍282