Google Benchmark 是 C++ 最常用可靠的微基准测试框架,专为精确测量小段代码执行时间设计,自动处理预热、采样、统计与输出;安装推荐 vcpkg 或源码编译,编写需用 benchmark::State& 参数并循环调用 KeepRunning()。

Google Benchmark 是 C++ 里最常用、最可靠的微基准(microbenchmark)测试框架,专为精确测量小段代码的执行时间而设计。它自动处理预热、多次采样、统计分析和结果输出,比手写 std::chrono 循环靠谱得多。
一、安装与基础编译
推荐用 CMake + vcpkg 或直接源码编译:
vcpkg 安装(推荐新手):vcpkg install benchmark,然后在 CMakeLists.txt 中 find_package(benchmark CONFIG REQUIRED) 手动编译:从 GitHub 仓库 克隆,运行 cmake -G "Ninja" && ninja && ninja install 确保链接 benchmark 和 pthread(Linux/macOS 必须)
二、写一个最简 benchmark
每个测试函数必须接受一个 benchmark::State& 参数,并在循环中调用 state.KeepRunning():
#include #include static void BM_VectorPushBack(benchmark::State& state) { for (auto _ : state) { std::vector v; for (int i = 0; i Range(1<<10, 1<<16); // 测试 1K ~ 64K 元素BENCHMARK_MAIN(); // 自动生成 main()
关键点:
立即学习“C++免费学习笔记(深入)”;
for (auto _ : state) 是框架控制循环的核心语法,每次迭代对应一次 benchmark 运行 state.range(0) 读取命令行传入的参数(如 --benchmark_range=1024) BENCHMARK_MAIN() 自动提供带参数解析的 main 函数,无需自己写
三、常用技巧与避坑指南
真实场景中容易忽略细节,导致结果失真:
避免编译器优化掉被测代码:用 benchmark::DoNotOptimize(x) 或 benchmark::ClobberMemory() 需要初始化开销不计入耗时?用 state.PauseTiming() / state.ResumeTiming() 想对比不同实现?用 BENCHMARK_REGISTER_F + fixture 类,共享 setup/teardown 逻辑 输出 JSON 或 CSV 报告?加参数:--benchmark_format=json --benchmark_out=result.json
四、运行与解读结果
编译后直接运行可执行文件,例如:
./benchmarks --benchmark_filter=Vector --benchmark_repetitions=3
典型输出含:
real_time:实际挂钟时间(含系统调度等),通常关注这个 cpu_time:进程占用 CPU 时间,适合排除 I/O 干扰 bytes_per_second / items_per_second:对吞吐类 benchmark 很有用(需调用 state.SetBytesProcessed()) 每项重复多次后的均值、标准差,帮你判断稳定性
基本上就这些。不复杂但容易忽略 timing 控制和防优化,跑准了才能真的比出快慢。
以上就是c++++ Google Benchmark框架怎么用_c++微基准性能测试【教程】的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1489127.html
微信扫一扫
支付宝扫一扫