课程介绍
C++,作为一门多范式的通用编程语言,适用的领域非常广泛。要对 C++ 程序进行性能优化,牵涉到的方方面面也非常多。本课程以现代 C++ 程序为中心,讨论如何对 C++ 程序进行优化。
本课程中有跟语言强相关的内容,也有跟语言关系较少、但在实践中经常伴随 C++ 程序出现的问题。
课程收益
通过本次课程,你将学习到:
性能相关的基本概念
C++ 程序的性能测试
C++ 跟性能相关的特性
C++ 程序的性能调优,包括:内存优化,算法优化,等等
课程大纲
1. 基本概念
l 计算机体系架构和性能
² 硬件
n 存储层次体系
n 处理器的乱序执行和流水线
n 并发
² 软件
n 系统调用开销
n 编译器优化
n 语言抽象性
l C++ 简介
² 为什么要使用 C++
² 如何学习 C++
² 内存管理和对象的生存期
n 栈
n 堆
n RAII
n 其他生存期
2. 测试方法
l 性能测试基础
² 性能测试中的问题
² 时间测量
² 编译器的干扰
² 处理器的干扰
² 防优化技巧
l 性能测试方法
² 性能分析器
² gprof 和 gperftools
² 两种性能测试方法
² perf
² 火焰图
l 性能分析和性能优化
l 函数、虚函数和函数对象
l string
l 栈上对象、堆上对象和移动语义
l 标准容器的性能
² 序列容器
² 关联容器
² 无序关联容器
4. C++ 高级技巧和性能分析
l 模板
² 基本语法概念
² 泛型算法
² 内联和排序
² 二进制膨胀问题
l 智能指针
² unique_ptr
² shared_ptr
l 视图类型
² string_view
² span
² ranges
l 编译期计算
² 利用模板参数进行计算
² 编译期类型推导
² SFINAE
² constexpr 变量和 constexpr 函数
² if constexpr
² 变参模板
l 返回对象和异常
² 返回对象
² 返回值优化
² 异常的好处和开销
l “替换”类型和错误处理
² any
² optional
² variant
² 标准库的错误处理
² expected
l 并发
² 进程和线程
² thread 和 future
² mutex
² 内存模型
² atomic
² 多线程优化
n mutex 和 atomic
n thread_local
² 并发对接口的冲击
² 并行
² 异构计算
l 异步编程和协程
² 消息循环和异步编程初探
² 网络程序和异步编程
² 生成器
² 常见协程库
5. 通用优化方法
l 工程和构建
² 编译选项
² 内联
² PGO 和 LTO
l 反汇编
² 编译器
² godbolt.org
l 循环优化
² 对象传递的方式
l 控制流优化
² 减少不必要的虚函数调用
l 内存优化
² 结构体
n 对齐问题
² 不要不必要地使用堆上内存
² 分配优化
n 内存池
² 缓存问题
l 算术表达式优化
l 输入输出优化
l 算法优化
l 不写无必要的优化
l 开源软件
l 结束语


