中图网文创礼盒,买2个减5元
欢迎光临中图网 请 | 注册

C++高性能编程

出版社:中国电力出版社出版时间:2024-01-01
开本: 16开 页数: 476
本类榜单:工业技术销量榜
中 图 价:¥96.2(6.5折) 定价  ¥148.0 登录后可看到会员价
加入购物车 收藏
运费6元,满69元免运费
?快递不能达地区使用邮政小包,运费14元起
云南、广西、海南、新疆、青海、西藏六省,部分地区快递不可达
本类五星书更多>

C++高性能编程 版权信息

  • ISBN:9787519883058
  • 条形码:9787519883058 ; 978-7-5198-8305-8
  • 装帧:平装
  • 册数:暂无
  • 重量:暂无
  • 所属分类:>

C++高性能编程 本书特色

通过书中丰富、典型的代码示例,读者将快速把握C++的特性和编程技巧。

C++高性能编程 内容简介

本书共分为14 章,包括C++概述,C++必b备技能,分析和度量性能,数据结构,算法,范围和视图,内存管理,编译时编程,Utilities 基础,代理对象和惰性求值,并发,协程和惰性生成器,用协程进行异步编程和并行算法。
本书期望你具备基本的C++和计算机体系结构知识,并对提升自身专业技能真正感兴趣。希望阅读本书后,能对如何在性能和语法上改进自己的C++代码有更深入的认识。

C++高性能编程 目录

目录 序 前言 第1 章 C++概述 1 1.1 为什么是C++ 1 1.1.1 零成本抽象 · 1 1.1.2 可移植性 · 4 1.2 与其他语言对比 4 1.2.1 竞争语言和性能 · 5 1.2.2 与性能无关的C++语言特性 · 7 1.2.3 C++的局限性 12 1.3 本书使用的库和编译器 13 1.4 总结 13 第2 章 C++**技能 · 14 2.1 用auto 关键字进行自动类型推断 14 2.1.1 在函数签名中使用auto 14 2.1.2 对变量使用auto 16 2.1.3 指针的常量传播 18 2.2 移动语义 19 2.2.1 拷贝构造函数,交换与移动 20 2.2.2 资源获取与五法则 22 2.2.3 具名变量和右值 25 2.2.4 默认移动语义和零法则 27 2.2.5 将&&修饰符应用于类成员函数 ·32 2.2.6 当拷贝被省略时,无论如何都不要移动 32 2.2.7 适时使用值传递 33 2.3 设计带有错误处理的接口 35 2.3.1 契约 36 2.3.2 错误处理 39 2.4 函数对象和lambda 表达式 46 2.4.1 C++lambda 的基本语法 46 2.4.2 捕获子句 47 2.4.3 为lambda 表达式分配C 函数指针 · 53 2.4.4 Lambda 类型 · 54 2.4.5 lambda 表达式和std::function · 54 2.4.6 泛型lambda 58 2.5 总结 60 第3 章 分析和度量性能 · 61 3.1 渐进复杂度和大O 符号 61 3.1.1 增长率 66 3.1.2 均摊时间复杂度 67 3.2 度量什么?该如何度量? 69 3.2.1 性能特征 71 3.2.2 运行时间的提升 71 3.2.3 性能计数器 72 3.2.4 *佳实践:性能测试 73 3.3 了解代码和热点 74 3.3.1 插桩型剖析器 75 3.3.2 采样型剖析器 77 3.4 微基准测试 79 3.4.1 阿姆达尔定律 80 3.4.2 微基准测试的隐患 81 3.4.3 微基准测试实例 81 3.5 总结 87 第4 章 数据结构 · 88 4.1 计算机内存的特性 88 4.2 标准库容器 92 4.2.1 序列式容器 92 4.2.2 关联式容器 96 4.2.3 容器适配器 ·100 4.3 使用视图 103 4.4 性能方面的考量 106 4.4.1 在复杂度与开销间寻求平衡 · 106 4.4.2 了解并使用适当的API 函数 107 4.5 并行数组 108 4.6 总结 115 第5 章 算法 116 5.1 标准库算法概述 116 5.1.1 标准库算法的演进 · 116 5.1.2 解决日常问题 · 117 5.2 迭代器与范围 124 5.2.1 迭代器 · 124 5.2.2 哨兵值与past-the-end 迭代器 125 5.2.3 范围 · 126 5.2.4 迭代器类别 · 127 5.3 标准算法的特点 129 5.4 算法不会改变容器大小 129 5.4.1 有输出的算法需要自己分配数据 · 130 5.4.2 算法默认使用operator==()和operator<() 131 5.4.3 使用projection 的约束算法 132 5.4.4 算法要求move 不能抛出异常 133 5.4.5 算法具有复杂度保证 · 133 5.4.6 算法的性能与C 语言库中的等价函数一样好 134 5.5 编写和使用泛型算法 135 5.5.1 非泛型算法 · 135 5.5.2 泛型算法 · 136 5.5.3 可被泛型算法使用的数据结构 · 137 5.6 *佳实践 139 5.6.1 使用约束算法 · 139 5.6.2 只对需要检索的数据进行排序 · 139 5.6.3 使用标准算法而非原始for 循环 142 5.6.4 避免容器拷贝 · 148 5.7 总结 149 第6 章 范围和视图 150 6.1 Ranges 库的动机 · 150 6.2 理解Ranges 库中的视图 · 153 6.2.1 视图是可组合的 ·154 6.2.2 范围视图带有范围适配器 ·155 6.2.3 视图是具有复杂度保证的非具权范围 ·156 6.2.4 视图不改变底层容器 ·157 6.2.5 视图可以被具体化为容器 ·157 6.2.6 视图是惰性求值的 ·158 6.3 标准库中的视图 160 6.3.1 范围视图 ·160 6.3.2 生成视图 ·160 6.3.3 转换视图 ·160 6.3.4 再谈std::string_view 与std::span 162 6.4 Ranges 库的未来 · 164 6.5 总结 164 第7 章 内存管理 165 7.1 计算机内存 165 7.1.1 虚拟地址空间 ·165 7.1.2 内存页 ·166 7.1.3 抖动 ·167 7.2 进程内存 167 7.2.1 栈内存 ·168 7.2.2 堆内存 ·171 7.3 内存中的对象 172 7.3.1 创建与销毁对象 ·172 7.3.2 内存对齐 ·176 7.3.3 内存补齐 ·179 7.4 内存所有权 182 7.4.1 隐式处理资源 ·183 7.4.2 容器 ·185 7.4.3 智能指针 ·185 7.5 小对象优化 188 7.6 自定义内存管理 191 7.6.1 创建arena 192 7.6.2 自定义内存分配器 · 196 7.6.3 使用多态内存分配器 · 201 7.6.4 实现自定义内存资源 · 205 7.7 总结 207 第8 章 编译时编程 208 8.1 模板元编程介绍 208 8.2 创建模板 209 8.3 使用整数作为模板参数 211 8.4 提供模板的特化 212 8.5 编译器如何处理模板函数 212 8.6 缩写函数模板 213 8.7 使用decltype 接收变量类型 214 8.8 类型萃取 215 8.8.1 类型萃取的类别 · 215 8.8.2 类型萃取的使用 · 216 8.9 常量表达式的使用 217 8.9.1 运行时环境中的constexpr 函数 218 8.9.2 使用consteval 声明即时函数 219 8.9.3 编译时多态与运行时多态 · 222 8.9.4 示例:使用if constexpr 的泛型取模函数 223 8.10 编译时检查程序错误 224 8.10.1 利用assert 在运行时触发错误 224 8.10.2 利用static_assert 在编译时触发错误 · 225 8.11 约束与概念 226 8.11.1 Point2D 模板,无约束版 · 226 8.11.2 泛型接口与不友好的报错信息 227 8.11.3 约束和概念的语法 229 8.11.4 标准库中的概念 234 8.12 元编程实例 235 8.12.1 示例1:创建通用的安全强制转换函数 235 8.12.2 示例2:在编译时对字符串进行哈希处理 238 8.13 总结 · 245 第9 章 Utilities 基础 · 246 9.1 用std::optional 表示可选值· 246 9.1.1 可选的返回值 ·247 9.1.2 可选的成员变量 ·248 9.1.3 避免在枚举中使用空状态 ·248 9.1.4 std::optional 的排序与比较 249 9.2 固定大小的异质集合 250 9.2.1 std::pair 250 9.2.2 std::tuple 251 9.2.3 访问元组中的成员 ·252 9.2.4 遍历std::tuple 的元素 ·253 9.2.5 元组展开 ·254 9.2.6 为元组实现其他算法 ·255 9.2.7 元组元素访问 ·256 9.2.8 结构化绑定 ·257 9.3 可变参数模板 258 9.4 可动态调整大小的异质集合 261 9.4.1 std::variant 262 9.4.2 std::variant 的异常安全性 264 9.4.3 访问variant ·265 9.5 使用了variant 的异质集合 · 266 9.5.1 访问variant 容器中的值 267 9.5.2 全局函数std::get() 268 9.6 实际案例 269 9.6.1 示例1:投影与比较运算符 269 9.6.2 示例2:反射 270 9.7 总结 273 第10 章 代理对象和惰性求值 · 274 10.1 惰性求值和代理对象简介· 274 10.1.1 惰性求值与急切计值 274 10.1.2 代理对象 275 10.2 避免使用代理对象构建对象 276 10.2.1 使用代理比较连接的字符串 276 10.2.2 实现代理 277 10.2.3 右值修饰符 278 10.2.4 存储拼接好的代理对象 279 10.2.5 性能评估 279 10.3 延迟sqrt 计算 280 10.3.1 一个简单的二维向量类 280 10.3.2 示例背后的数学概念 281 10.3.3 实现LengthProxy · 283 10.3.4 用LengthProxy 比较长度 285 10.3.5 用LengthProxy 计算长度 286 10.3.6 性能评估 287 10.4 探索运算符重载和代理对象 289 10.5 总结 291 第11 章 并发 · 292 11.1 了解并发的基本概念 292 11.2 是什么让并发编程变得困难? 293 11.3 并发和并行 293 11.3.1 时间切片 294 11.3.2 共享内存 295 11.3.3 数据竞争 296 11.3.4 互斥锁 298 11.3.5 死锁 299 11.3.6 同步任务与异步任务 299 11.4 C++中的并发编程 · 300 11.4.1 线程支持库 301 11.4.2 C++20 中其他的同步原语 315 11.4.3 C++中的原子操作 326 11.4.4 C++内存模型 335 11.5 无锁编程 339 11.6 性能指南 341 11.6.1 避免竞争 341 11.6.2 避免阻塞操作 342 11.6.3 线程/CPU 核数 ·342 11.6.4 线程优先级 343 11.6.5 线程亲和性 343 11.6.6 伪共享 344 11.7 总结 · 345 第12 章 协程和惰性生成器 · 346 12.1 几个引人入胜的例子 · 347 12.2 协程抽象 · 348 12.2.1 子例程和协程 349 12.2.2 在CPU 上运行子例程和协程 350 12.2.3 无栈协程和有栈协程 358 12.2.4 目前为止所学的内容 360 12.3 C++中的协程 · 360 12.3.1 标准C++中协程的涵盖内容 361 12.3.2 C++函数成为协程的关键是什么? ·361 12.3.3 一个*简但完整的示例 363 12.3.4 分配协程状态 368 12.3.5 避免悬空引用 370 12.3.6 错误处理 375 12.3.7 自定义点 375 12.4 生成器 · 376 12.4.1 实现生成器 376 12.4.2 使用Generator 类 ·380 12.4.3 在实际工作中使用生成器 387 12.5 性能 · 395 12.6 总结 · 395 第13 章 用协程进行异步编程 · 396 13.1 再谈可等待类型 · 396 13.2 实现一个基本任务类型 · 398 13.2.1 处理返回值和异常 401 13.2.2 恢复等待中的协程 402 13.2.3 支持void Task 404 13.2.4 同步等待任务完成 406 13.2.5 使用sync_wait()测试异步任务 411 13.3 封装基于回调的API · 412 13.4 使用Boost.Asio 实现的并发服务器 416 13.4.1 实现服务器 416 13.4.2 运行并连接服务器 418 13.4.3 在服务器示例中实现的(以及未实现的)功能 419 13.5 总结 420 第14 章 并行算法 · 421 14.1 并行的重要性 421 14.2 并行算法 421 14.2.1 度量并行算法 422 14.2.2 回顾阿姆达尔定律 423 14.2.3 实现并行std::transform() · 424 14.2.4 并行化std::count_if() 434 14.2.5 并行化std::copy_if() 435 14.3 标准库中的并行算法 441 14.3.1 执行策略 442 14.3.2 异常处理 446 14.3.3 并行算法的新增和修改 447 14.3.4 并行化基于索引的for 循环 449 14.4 在GPU 上执行算法 450 14.5 总结 451 14.6 分享经验 452
展开全部

C++高性能编程 作者简介

[瑞典]比约恩·安德里斯特(Bj?rn Andrist),是一名自由软件顾问,目前专注于音频应用程序。十多年来,他一直从事C ++的专业工作,项目范围从Unix服务器应用程序到台式机和移动设备上的实时音频应用程序,拥有KTH Royal Technology Institute的计算机工程学士学位和计算机科学硕士学位。他还教授算法和数据结构,并发编程和编程方法的课程。 [瑞典]维克托·塞尔(Viktor Sehr),是Toppluva的主要开发人员,使用针对移动硬件的高度优化的图形引擎。他在使用C ++方面拥有10年的专业经验,并专注于实时图形,音频和建筑设计,拥有Link?ping大学的媒体科学硕士学位。他在Mentice和Raysearch Laboratories开发了医学可视化软件,并在Propellerhead Software开发了实时音频应用程序。

商品评论(0条)
暂无评论……
书友推荐
编辑推荐
返回顶部
中图网
在线客服