C++ Core Guidelines 整理目录
- 哲学部分
- 接口(Interface)部分
- 函数部分
- 类和类层次结构部分
- 枚举部分
- 资源管理部分
- 性能部分
Per: Performance
Per.1: Don’t optimize without reason
- 翻译: 不要无理由地进行优化.
- 原因: 优化应基于实际需求和性能瓶颈分析, 避免过早或不必要的复杂性.
Per.2: Don’t optimize prematurely
- 翻译: 不要过早优化.
- 原因: 在项目初期, 优先关注功能实现和代码质量, 等到性能问题明确时再进行针对性优化.
Per.3: Don’t optimize something that’s not performance critical
- 翻译: 不要优化非性能关键的部分.
- 原因: 集中精力在真正影响性能的关键路径上, 避免浪费时间和资源. 优化之前一定要做性能测试, 找到真正的性能瓶颈, 再着手进行优化.
Per.4: Don’t assume that complicated code is necessarily faster than simple code
- 翻译: 不要假设复杂的代码一定比简单的代码快.
- 原因: 简单的代码通常更容易维护且编译器能够更好地优化, 复杂的代码反而可能导致性能下降.
Per.5: Don’t assume that low-level code is necessarily faster than high-level code
- 翻译: 不要假设低级代码一定比高级代码快.
- 原因: 高级语言特性和库函数往往经过高度优化, 使用它们可以提高开发效率而不牺牲性能.
Per.6: Don’t make claims about performance without measurements
- 翻译: 没有测量数据不要对性能下结论.
- 原因: 使用基准测试和性能分析工具来验证假设, 确保优化措施确实有效.
Per.7: Design to enable optimization
- 翻译: 设计时考虑优化的可能性.
- 原因: 提前规划好架构和接口设计, 为后续的优化工作打下基础.
Per.10: Rely on the static type system
- 翻译: 依赖静态类型系统.
- 原因: 利用 C++的静态类型检查机制, 在编译期捕获错误并生成高效的代码.
Per.11: Move computation from run time to compile time
- 翻译: 尽量将运行时计算移到编译时.
- 原因: 减少运行时开销, 利用模板元编程和常量表达式等特性提前完成计算.
Per.12: Eliminate redundant aliases
- 翻译: 消除冗余别名.
- 原因: 避免不必要的类型转换和名称混淆, 保持代码清晰简洁.
Per.13: Eliminate redundant indirections
- 翻译: 消除冗余间接操作.
- 原因: 减少指针和引用的层级嵌套, 直接访问数据以提高性能.
Per.14: Minimize the number of allocations and deallocations
- 翻译: 尽量减少分配和释放操作的次数.
- 原因: 分配和释放内存是昂贵的操作, 减少其频率可以显著提升性能.
Per.15: Do not allocate on a critical branch
- 翻译: 不要在关键路径上进行分配.
- 原因: 关键路径上的内存分配可能导致性能瓶颈, 尽量预先分配或使用对象池等技术.
Per.16: Use compact data structures
- 翻译: 使用紧凑的数据结构.
- 原因: 减少内存占用和缓存未命中率, 提高数据访问效率.
Per.17: Declare the most used member of a time-critical struct first
- 翻译: 在时间关键的结构体中, 首先声明最常用的成员.
- 原因: 通过合理布局数据成员, 减少内存对齐带来的额外开销, 提高访问速度.
Per.18: Space is time
- 翻译: 空间即时间.
- 原因: 优化内存布局和使用方式, 减少不必要的内存消耗, 从而间接提升执行效率.
Per.19: Access memory predictably
- 翻译: 可预测地访问内存.
- 原因: 顺序访问内存块可以充分利用 CPU 缓存, 避免随机访问导致的性能下降.
Per.30: Avoid context switches on the critical path
- 翻译: 避免在关键路径上发生上下文切换.
- 原因: 上下文切换会带来显著的性能开销, 特别是在高并发场景下, 尽量减少或消除关键路径上的线程切换, 以保证系统的响应速度和吞吐量.