c++ Google Benchmark框架怎么用_c++微基准性能测试【教程】


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

c++ google benchmark框架怎么用_c++微基准性能测试【教程】

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
  • 确保链接 benchmarkpthread(Linux/macOS 必须)

二、写一个最简 benchmark

每个测试函数必须接受一个 benchmark::State& 参数,并在循环中调用 state.KeepRunning()

#include <benchmark/benchmark.h>
#include <vector>

static void BM_VectorPushBack(benchmark::State&amp; state) {
  for (auto _ : state) {
    std::vector<int> v;
    for (int i = 0; i < state.range(0); ++i) {
      v.push_back(i);
    }
  }
}
BENCHMARK(BM_VectorPushBack)->Range(1<<10, 1<<16); // 测试 1K ~ 64K 元素

BENCHMARK_MAIN(); // 自动生成 main()

关键点:

立即学习“C++免费学习笔记(深入)”;

MCP市场 MCP市场

中文MCP工具聚合与分发平台

MCP市场 211 查看详情 MCP市场
  • 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++微基准性能测试【教程】的详细内容,更多请关注其它相关文章!


# 性能测试  # 小段  # 最常用  # 如何使用  # 专为  # 执行时间  # red  # cos  # macos  # mac  # github  # go  # git  # linux  # c++  # google  # 网站seo优化基础知识  # 专业的营销推广预算  # 城阳优化网站建设  # 芜湖短视频seo  # 江西seo猿梦  # 人才网站推广小技巧  # 推广网站的软件有哪些好  # 建设网站那个平台好  # 信阳网站建设怎么做  # 天津推荐的网站建设调试  # 相关文章  # 并在  # 帮你  # 动态分配 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《下一站江湖2》独孤剑诀习得方法  Composer reinstall命令重装损坏的包  TikTok网页版入口快速访问 TikTok官网账号登录方法  服装短视频如何起号推广?服装短视频起号推广有什么要求?  Win10共享文件夹设置方法 Win10局域网文件共享全攻略【教程】  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  b站如何剪辑视频_b站必剪app使用教程  拷贝漫画2025网页版入口 拷贝漫画官网免费看全集  如何在Podman容器中运行Composer_Docker替代品Podman的PHP与Composer容器化实践  在J*a里什么是行为抽象_抽象行为对代码复用的提升作用  51漫画网实时入口 51漫画网页版官方免费漫画入口  快手极速版在线体验区 快手极速版网页体验入口  wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式  263企业邮箱如何设置邮件转发功能  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法  Yandex浏览器官方入口_Yandex搜索引擎中文版  《随手记》备份数据方法  C++ bind函数使用教程_C++参数绑定与函数适配器的应用  mysql中外键约束如何使用_mysql FOREIGN KEY操作  Eclipse开发J*a快速入门  Django模型动态关联检查:高效管理复杂关系  《荔枝fm》导出文件教程  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  使用 J*aScript 随机化 CSS Grid 布局中的元素顺序  海外搜索引擎推广效果怎么样,怎么分析效果!  《宝可梦大集结》S4冠军之路开始时间介绍  PHP安全加载非公开目录图片与动态内容类型处理指南  AO3官方镜像链接 | 最新防走失网址永久收藏  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  c++如何链接Boost库_c++准标准库的集成与使用  如何高效地基于键列值映射DataFrame中的多个列  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  《火影忍者:木叶高手》快速升级攻略  使用document.execCommand实现Web文本编辑器加粗/取消加粗  win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】  小米手机截图后如何查看历史_小米手机截图历史记录查看方法  pubmed数据库官方主页_pubmed学术论文查找官网直达  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  《杖剑传说》食谱大全  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  《我的恋爱逃生攻略》中文名字输入方法  《蓝色星原:旅谣》坐骑获取攻略  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  《随手记》启用语音备注方法  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  我的世界游戏平台入口 我的世界官方官网直达链接 

 2025-12-15

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.