您好,欢迎来到聚文网。
登录
免费注册
网站首页
|
搜索
热搜:
磁力片
|
漫画
|
购物车
0
我的订单
商品分类
首页
幼儿
文学
社科
教辅
生活
销量榜
C++性能优化指南
字数: 449千字
装帧: 平装
出版社: 人民邮电出版社
作者: (美)柯尔特·甘瑟尔罗斯(Kurt Guntheroth) 著;杨文轩 译
出版日期: 2018-01-01
商品条码: 9787115471390
版次: 1
开本: 16开
页数: 282
出版年份: 2018
定价:
¥89
销售价:
登录后查看价格
¥{{selectedSku?.salePrice}}
库存:
{{selectedSku?.stock}}
库存充足
{{item.title}}:
{{its.name}}
加入购物车
立即购买
加入书单
收藏
精选
¥5.83
世界图书名著昆虫记绿野仙踪木偶奇遇记儿童书籍彩图注音版
¥5.39
正版世界名著文学小说名家名译中学生课外阅读书籍图书批发 70册
¥8.58
简笔画10000例加厚版2-6岁幼儿童涂色本涂鸦本绘画本填色书正版
¥5.83
世界文学名著全49册中小学生青少年课外书籍文学小说批发正版
¥4.95
全优冲刺100分测试卷一二三四五六年级上下册语文数学英语模拟卷
¥8.69
父与子彩图注音完整版小学生图书批发儿童课外阅读书籍正版1册
¥24.2
好玩的洞洞拉拉书0-3岁宝宝早教益智游戏书机关立体翻翻书4册
¥7.15
幼儿认字识字大王3000字幼儿园中班大班学前班宝宝早教启蒙书
¥11.55
用思维导图读懂儿童心理学培养情绪管理与性格培养故事指导书
¥19.8
少年读漫画鬼谷子全6册在漫画中学国学小学生课外阅读书籍正版
¥64
科学真好玩
¥12.7
一年级下4册·读读童谣和儿歌
¥38.4
原生态新生代(传统木版年画的当代传承国际研讨会论文集)
¥11.14
法国经典中篇小说
¥11.32
上海的狐步舞--穆时英(中国现代文学馆馆藏初版本经典)
¥21.56
猫的摇篮(精)
¥30.72
幼儿园特色课程实施方案/幼儿园生命成长启蒙教育课程丛书
¥24.94
旧时风物(精)
¥12.04
三希堂三帖/墨林珍赏
¥6.88
寒山子庞居士诗帖/墨林珍赏
¥6.88
苕溪帖/墨林珍赏
¥6.88
楷书王维诗卷/墨林珍赏
¥9.46
兰亭序/墨林珍赏
¥7.74
祭侄文稿/墨林珍赏
¥7.74
蜀素帖/墨林珍赏
¥12.04
真草千字文/墨林珍赏
¥114.4
进宴仪轨(精)/中国古代舞乐域外图书
¥24.94
舞蹈音乐的基础理论与应用
编辑推荐
本书是一本C++代码优化指南。作者精选了他在近30年编程生涯中频繁使用的技术和能够带来能提升效果的技术,旨在让读者在提升C++程序的同时,思考软件优化之美。书中主要内容有:代码优化的意义和总原则,与优化有关的计算机硬件背景知识,能行分析方法及工具,优化字符串的使用,算法、查找和排序等等。
内容简介
《C++性能优化指南》是一本C++代码优化指南。作者精选了他在近30年编程生涯中频繁使用的技术和能够带来性能提升效果的技术,旨在让读者在提升C++程序的同时,思考优化软件之美。书中主要内容有:代码优化的意义和总原则,与优化相关的计算机硬件背景知识,性能分析方法及工具,优化字符串的使用,算法、动态分配内存、热点语句、查找与排序等等的优化方法。《C++性能优化指南》适合所有C++程序员,也可供其他语言的程序员优化代码时作为参考。
作者简介
Kurt Guntheroth 软件开发工作近40年,C++代码实用年龄20余年。具有在Windows、Linux和嵌入式设备上的开发经验。 Kurt不是一个工作狂,他喜欢陪伴他的妻子和那四个活泼的儿子。Kurt居住在华盛顿州的西雅图。
目录
前言xvii
第 1章优化概述1
1.1优化是软件开发的一部分2
1.2优化是高效的3
1.3优化是没有问题的3
1.4这儿一纳秒,那儿一纳秒5
1.5C++代码优化策略总结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.1C++所相信的计算机谎言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.3C++也会说谎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.390/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.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.1C++变量回顾84
6.1.1变量的存储期84
6.1.2变量的所有权86
6.1.3值对象与实体对象86
6.2C++动态变量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.2std::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-elseif-else142
7.4.2用虚函数替代switch 或if143
7.4.3使用无开销的异常处理144
7.5小结145
第8章使用更好的库146
8.1优化标准库的使用146
8.1.1C++标准库的哲学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使用头文件优化算法167
9.4.1以序列容器作为被查找的键值对表168
9.4.2std::find():功能如其名,O(n)时间开销169
9.4.3std::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.2std::vector与std::string187
10.2.1重新分配的性能影响188
10.2.2std::vector中的插入与删除188
10.2.3遍历std::vector190
10.2.4对std::vector排序191
10.2.5查找std::vector191
10.3std::deque191
10.3.1std::deque中的插入和删除193
10.3.2遍历std::deque194
10.3.3对std::deque 的排序194
10.3.4查找std::deque194
10.4std::list194
10.4.1std::list中的插入和删除196
10.4.2遍历std::list中197
10.4.3对std::list排序197
10.4.4查找std::list197
10.5std::forward_list198
10.5.1std::forward_list中的插入和删除199
10.5.2遍历std::forward_list199
10.5.3对std::forward_list排序199
10.5.4查找std::forward_list199
10.6std::map与std::multimap199
10.6.1std::map中的插入和删除200
10.6.2遍历std::map202
10.6.3对std::map排序202
10.6.4查找std::map203
10.7std::set与std::multiset203
10.8std::unordered_map与std::unordered_multimap204
10.8.1std::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.2promise和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.1.1动态变量的生命周期256
13.1.2内存管理函数分配和释放内存256
13.1.3new表达式构造动态变量259
13.1.4delete表达式处置动态变量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.1C++11分配器273
13.4.2C++98分配器的其他定义274
13.4.3一个分配固定大小内存块的分配器278
13.4.4字符串的分配固定大小内存块的分配器279
13.5小结281
作者介绍282
封面介绍282
×
Close
添加到书单
加载中...
点此新建书单
×
Close
新建书单
标题:
简介:
蜀ICP备2024047804号
Copyright 版权所有 © jvwen.com 聚文网