C++如何计算程序运行时间?(代码示例)

发布时间 - 2025-12-29 00:00:00    点击率:
std::chrono是C++11起最推荐的计时方式,精度高、跨平台、类型安全;用high_resolution_clock测毫秒级耗时适合小段代码,可依需转微秒、纳秒或带小数的秒,注意避免clock()误用、编译器优化及单次测量干扰。

std::chrono 是 C++11 起最推荐的方式,精度高、跨平台、类型安全,比老式的 clock()time() 更可靠。

用 high_resolution_clock 测毫秒级耗时

适合测量小段代码(如算法执行、函数调用)的精确耗时:

#include 
#include 

int main() { auto start = std::chrono::high_resolution_clock::now();

// 你要测的代码,比如一个简单循环
volatile int sum = 0;  // volatile 防止被编译器优化掉
for (int i = 0; i < 1000000; ++i) {
    sum += i;
}

auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast(end - start);

std::cout << "耗时: " << duration.count() << " 毫秒\n";
return 0;

}

测微秒或纳秒,只需换 duration_cast

根据需要调整时间单位,不改变计时逻辑:

  • 微秒std::chrono::duration_cast<:chrono::microseconds>(end - start)
  • 纳秒std::chrono::duration_cast<:chrono::nanoseconds>(end - start)
  • 秒(带小数)std::chrono::duration(end - start).count()

避免常见坑

几个容易出错但很关键的细节:

  • 别用 clock() 测 wall-clock 时间——它返回的是 CPU 时间,多线程下不准,且单位是 CLOCKS_PER_SEC,非秒
  • 别在 Release 模式下测空循环或无副作用代码——编译器可能直接优化掉,结果为 0
  • 单次测量易受干扰,要测得准可跑多次取平均,或用 std::chrono::steady_clock(更稳定,不随系统时间调整)
  • 如果测整个程序启动到结束,main() 开头记 start,结尾记 end 即可,无需额外线程

基本上就这些。用 chrono 三行搞定,清晰又靠谱。


# ai  # c++  # ios  # stream  # count  # double  # 循环  # 线程  # 多线程  # 算法  # 小段  # 的是  # 几个  # 你要  # 只需  # 精度高  # 或用  # 但很  # 不改变 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序 配置文件详细介绍  Laravel如何使用Blade组件和插槽?(Component代码示例)  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  如何在建站宝盒中设置产品搜索功能?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Android滚轮选择时间控件使用详解  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何基于云服务器快速搭建个人网站?  MySQL查询结果复制到新表的方法(更新、插入)  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何在腾讯云免费申请建站?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Android利用动画实现背景逐渐变暗  如何续费美橙建站之星域名及服务?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  5种Android数据存储方式汇总  javascript读取文本节点方法小结  java获取注册ip实例  智能起名网站制作软件有哪些,制作logo的软件?  黑客如何利用漏洞与弱口令入侵网站服务器?  Laravel storage目录权限问题_Laravel文件写入权限设置  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  北京网站制作的公司有哪些,北京白云观官方网站?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  详解阿里云nginx服务器多站点的配置  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  lovemo网页版地址 lovemo官网手机登录  简单实现Android文件上传  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  JS经典正则表达式笔试题汇总  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  javascript如何操作浏览器历史记录_怎样实现无刷新导航  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  如何在万网ECS上快速搭建专属网站?  如何快速搭建高效简练网站?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)