Google Benchmark是C++性能测试最主流可靠的选择,能自动处理预热、多次运行、统计误差和消除编译器优化干扰;需用CMake/vcpkg编译链接,以BENCHMARK宏注册函数,用state循环控制计时,配合DoNotOptimize、Pause/ResumeTiming等确保结果真实,并支持JSON输出与多版本对比。
用 C++ 做性能测试,Google Benchmark 是目前最主流、最可靠的选择。它能自动处理预热、多次运行、统计误差、消除编译器优化干扰等问题,比手写 std::chrono 循环测时间更科学、结果更可信。
推荐使用 CMake + vcpkg 或直接源码编译(避免动态链接问题):
vcpkg install benchmark:x64-windows(Windows)或 benchmark:x64-linux(Linux)find_package(benchmark REQUIRED),然后 target_link_libraries(your_target PRIVATE benchmark)
-DNDEBUG 外的调试宏(如 -DBENCHMARK_ENABLE_GTEST_TESTS=OFF),避免引入 gtest 依赖每个测试函数必须以 BENCHMARK() 宏注册,参数是 benchmark::State&,循环由框架控制:
#include#include void BMVectorPushBack(benchmark::State& state) { for (auto : state) { std::vector
v; for (int i = 0; i < state.range(0); ++i) { v.push_back(i); } } } BENCHMARK(BM_VectorPushBack)->Range(128, 16384); // 测试不同数据规模
for (auto _ : state) 是必需写法——框架会重复执行该循环,并自动管理计时范围state.range(0) 读取当前测试规模(支持多档位自动遍历)std::vector v)除非你要测构造开销;否则应提到循环外并用 state.PauseTiming()/ResumeTiming() 隔离非核心逻辑默认行为可能掩盖真实性能,注意以下三点:
benchmark::DoNotOptimize(),例如:benchmark::DoNotOptimize(result = compute(x));
state.PauseTiming() 暂停计时,做完预分配或清理后再 ResumeTiming()
->Iterations(1000) 或 ->MinTime(0.5)(单位秒)控制采样精度,避免过短导致误差大编译后执行可执行文件,支持多种输出格式:
--benchmark_format=json --benchmark_out=result.json,方便脚本分析或 CI 存档--benchmark_filter=BM_.* --benchmark_repetitions=3 可跑多次取中位数,再用 --benchmark_compare 输出差异百分比关注 “mean” 和 “stddev”,若 stddev > 5% mean,说明环境干扰大(如 CPU 频率波动、后台进程),建议关掉无关程序、固定 CPU 频率、用 taskset -c 0 绑核重
试。