Skip to content

21 Writing Efficient C++

概述

高效(efficiency)的程序是指没有额外浪费的开销。

语言层面的高效指合理高效使用编程语言。设计层面的高效指的是选择高效的算法、避免无效的步骤计算、选择适当的优化等。

不过大部分程序并不需要极致的性能,也无需优化到每一行代码。

语言层面

推荐做法是实现一个干净、结构清晰的实现,然后通过 profile 确定优化点之后再着手优化。

尽可能传递引用,除非一定要拷贝,此时推荐按值传递+移动。按引用捕获异常。使用移动语义避免昂贵的拷贝。避免创建临时对象。预分配内存。C++23 引入了 std::unreachable() 可以帮助编译器进行优化。

设计层面

设计层面的优化比语言层面的优化重要的多,比如选择更好的算法的提升是数量级、甚至是指数级的提升。

对于文件的访问、网络的访问,推荐使用缓存。计算结果也可以缓存,这依赖于计算是否耗时。需要创建大量生命周期很短的对象、线程时,考虑使用对象池和线程池。缓存要考虑无效的问题,底层数据变了,可以通过某种机制通知缓存。缓存最好是不让调用者知道。