C++ 性能实测导读:编译器、标准库与并发原语的成本量化
本目录的每一篇都遵循同一个方法论:先给出可复现的最小实验工程,用真机实测数据回答「这个语言特性到底花多少成本」,再用反汇编或硬件计数器解释成本从哪里来。与只讲语义的入门文档不同,这里关心的是编译选项、对象模型与并发原语在真实负载下的量化差异。入门背景可先读低延时设计模式与C++ 互斥量全解。
编译器优化能力实测
- cpp-lto-thin-full-benchmark —— LTO 链接时优化三档实测:无 LTO / 全量 LTO / ThinLTO 的构建耗时、二进制体积、运行性能对照与反汇编证据
- cpp-pgo-two-stage-benchmark —— PGO 两阶段实测:插桩训练、剖面合并、引导重建全流程,同分布 1.45 倍与错位分布 1.10 倍收益对照,含 divl 退化反汇编证据
- cpp-virtual-devirtualization-conditions —— 虚函数去虚化五形态三档实测:final/LTO 不充分,PGO 猜测性去虚化的守卫比较与内联冷兜底反汇编证据
对象模型与标准库成本
- cpp-exception-vs-error-code-cost —— 异常/错误码/Expected 三机制两路径实测:成功路径同量级,抛出路径慢约 3000 倍、单次约 6 μs,含人格 routine 与异常表段证据
- cpp-rvo-nrvo-move-noexcept —— RVO/NRVO/移动语义实测:C++17 保证复制消除边界、noexcept 决定 vector 扩容移动还是拷贝,缺 noexcept 慢约 3.8 倍
- cpp-shared-ptr-refcount-contention —— shared_ptr 四模式六档线程扫档:每任务拷贝致加速比仅 0.27–0.31 的负扩展,7 条 lock 原子指令与缓存行乒乓机理证据
- cpp-std-function-heap-alloc-threshold —— std::function SBO 阈值实测:24 字节内零堆分配、越界构造贵 2.2 倍,过对齐 3.9 倍,含对齐版 new 重载与 O2/O0 双档对照
相关参考
- 低延时设计模式全景——忙等待、无锁队列与 RCU 的系统梳理
- 并发基准测试方法论——干扰源消除、rdtsc 计时与 HdrHistogram 统计口径
- perf 工具指南——stat/top/record/c2c 等子命令的系统用法
总结
这个子目录用统一的「真机实测 + 反汇编佐证」口径量化 C++ 特性成本:编译优化看 LTO/PGO/去虚化的生效条件,对象模型看异常、移动与智能指针的隐藏开销,结论都可以照着实验工程自行复现。