全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++如何写性能测试 c++ Google Benchmark使用【指南】

Google Benchmark是C++性能测试最主流可靠的选择,能自动处理预热、多次运行、统计误差和消除编译器优化干扰;需用CMake/vcpkg编译链接,以BENCHMARK宏注册函数,用state循环控制计时,配合DoNotOptimize、Pause/ResumeTiming等确保结果真实,并支持JSON输出与多版本对比。

用 C++ 做性能测试,Google Benchmark 是目前最主流、最可靠的选择。它能自动处理预热、多次运行、统计误差、消除编译器优化干扰等问题,比手写 std::chrono 循环测时间更科学、结果更可信。

一、快速上手:编译与链接 Google Benchmark

推荐使用 CMake + vcpkg 或直接源码编译(避免动态链接问题):

  • vcpkg 安装(推荐):vcpkg install benchmark:x64-windows(Windows)或 benchmark:x64-linux(Linux)
  • CMakeLists.txt 中加入:find_package(benchmark REQUIRED),然后 target_link_libraries(your_target PRIVATE benchmark)
  • 确保关闭 -DNDEBUG 外的调试宏(如 -DBENCHMARK_ENABLE_GTEST_TESTS=OFF),避免引入 gtest 依赖

二、写一个基础 benchmark 函数

每个测试函数必须以 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));
  • 排除 setup/teardown 开销:用 state.PauseTiming() 暂停计时,做完预分配或清理后再 ResumeTiming()
  • 指定迭代次数或时间:用 ->Iterations(1000)->MinTime(0.5)(单位秒)控制采样精度,避免过短导致误差大

四、运行与解读结果

编译后执行可执行文件,支持多种输出格式:

  • 默认终端输出:显示每项的平均耗时(ns/op)、标准差、速率(如 items/s)
  • 生成 JSON:--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 绑核重试。


# linux  # js  # json  # go  # windows  # c++  # win  # google  # 性能测试  # red  # for  # auto  # 循环  # private  # 你要  # 遍历  # 推荐使用  # 三点  # 再用  # 它能  # 做完  # 重试  # 则应 


相关文章: 如何零成本快速生成个人自助网站?  ui设计制作网站有哪些,手机UI设计网址吗?  如何做静态网页,sublimetext3.0制作静态网页?  公司网站的制作公司,企业网站制作基本流程有哪些?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  网站制作服务平台,有什么网站可以发布本地服务信息?  建站之星微信建站一键生成小程序+多端营销系统  如何快速搭建高效可靠的建站解决方案?  北京专业网站制作设计师招聘,北京白云观官方网站?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何快速生成凡客建站的专业级图册?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  北京的网站制作公司有哪些,哪个视频网站最好?  如何在万网自助建站平台快速创建网站?  盐城做公司网站,江苏电子版退休证办理流程?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  网站设计制作企业有哪些,抖音官网主页怎么设置?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  网站制作公司排行榜,四大门户网站排名?  如何快速启动建站代理加盟业务?  如何在局域网内绑定自建网站域名?  如何快速生成橙子建站落地页链接?  定制建站策划方案_专业建站与网站建设方案一站式指南  香港服务器网站卡顿?如何解决网络延迟与负载问题?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星代理商如何保障技术支持与售后服务?  建站之星价格显示格式升级,你的预算足够吗?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何基于云服务器快速搭建网站及云盘系统?  如何在搬瓦工VPS快速搭建网站?  香港服务器部署网站为何提示未备案?  如何用PHP工具快速搭建高效网站?  广州美橙建站如何快速搭建多端合一网站?  怎么将XML数据可视化 D3.js加载XML  免费网站制作appp,免费制作app哪个平台好?  高性价比服务器租赁——企业级配置与24小时运维服务  北京网站制作公司哪家好一点,北京租房网站有哪些?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何在Windows服务器上快速搭建网站?  导航网站建站方案与优化指南:一站式高效搭建技巧解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。