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