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


