讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

AniShort
AniShort

AI短剧协同制作平台

c++如何获取程序运行时间 c++代码性能分析【技巧】

老芳吖_9705

老芳吖_9705

发布时间:2025-12-25 18:07:02

|

251人浏览过

|

来源于php中文网

原创

在C++中推荐用std::chrono::steady_clock测运行时间,记录起止time_point后duration_cast转换单位;可封装RAII计时器类,支持标签和单位模板;需防编译器优化干扰,配合perf等工具做深度性能分析。

c++如何获取程序运行时间 c++代码性能分析【技巧】

在 C++ 中获取程序运行时间,最准确、推荐的方式是使用 std::chrono 库——它基于高精度时钟,跨平台且无依赖,比传统的 clock() 或 time() 更可靠。

用 std::chrono 测量代码段执行时间

核心思路:记录起始和结束的高精度时间点,相减后转换为所需单位(如毫秒、微秒)。

  • 推荐使用 std::chrono::high_resolution_clock(或 steady_clock,更防系统时间跳变)
  • 用 time_point 存储时刻,duration_cast 转换单位
  • 避免测量 I/O、用户输入等外部干扰,多次运行取平均更稳妥

示例:

#include <chrono>
#include <iostream>
<p>int main() {
auto start = std::chrono::steady_clock::now();</p><pre class="brush:php;toolbar:false;">// ⚙️ 这里放待测代码,例如:
for (volatile int i = 0; i < 1000000; ++i) {} // 防优化

auto end = std::chrono::steady_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
std::cout << "耗时: " << duration.count() << " 微秒\n";

}

封装成可复用的计时器类

手动写起止时间易出错、不直观。封装一个 RAII 风格的计时器,构造开始计时,析构自动打印结果,适合快速插桩。

Google Chirp 3 HD TTS Skill
Google Chirp 3 HD TTS Skill

使用Google Cloud Chirp 3 HD语音的高保真生成式语音合成,提供卓越的真实感、情感表现力和自然节奏...

下载

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

  • 支持自定义标签,方便区分不同代码段
  • 默认输出毫秒,也可通过模板参数指定单位(如 nanoseconds)
  • 构造函数不启动计时,调用 start() 才开始,更灵活

简易实现:

#include <chrono>
#include <iostream>
#include <string>
<p>struct Timer {
using Clock = std::chrono::steady_clock;
using us = std::chrono::microseconds;
std::string label;
Clock::time_point start_tp;
bool is_running = false;</p><pre class="brush:php;toolbar:false;">explicit Timer(const std::string& l = "") : label(l) {}

void start() { start_tp = Clock::now(); is_running = true; }
void stop() {
    if (!is_running) return;
    auto end = Clock::now();
    auto us_count = std::chrono::duration_cast<us>(end - start_tp).count();
    std::cout << (label.empty() ? "Timer" : label) 
              << ": " << us_count << " μs\n";
    is_running = false;
}

}; // 使用: // Timer t("sort"); t.start(); std::sort(...); t.stop();

注意编译器优化对计时的影响

空循环、无副作用计算可能被编译器完全优化掉,导致测出“0 时间”。这不是计时不准,而是代码没真执行。

  • 对计算结果做 volatile 声明(如 volatile int x = ...;),或强制使用(如输出、存入全局变量)
  • 关闭优化(-O0)仅用于调试;性能分析务必用实际构建选项(如 -O2)
  • 用 asm volatile("" ::: "memory") 插入内存屏障,阻止重排和消除(进阶)

进阶:配合性能分析工具定位瓶颈

单纯测总时间不够,需知道哪一行/哪个函数最慢。C++ 生态有成熟方案:

  • Linux 下用 perf:编译加 -g,运行 perf record ./a.out,再 perf report 查热点函数
  • Clang/GCC 支持 PGO(Profile-Guided Optimization):先采样运行,再编译优化,兼顾速度与准确性
  • IDE 集成工具:VS 自带性能探查器,CLion / Qt Creator 可接 perf 或内置分析器
  • 轻量级库如 backward-cpp 或 google/benchmark 提供结构化微基准测试能力

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

相关专题

更多
C++ Qt图形开发
C++ Qt图形开发

本专题专注于 C++ Qt框架在图形界面开发中的应用,系统讲解窗口设计、信号与槽机制、界面布局、事件处理、数据库连接与跨平台打包等核心技能,通过多个桌面应用项目实战,帮助学员快速掌握 Qt 框架并独立完成跨平台GUI软件的开发。

5942

2025.08.15

C++桌面程序开发
C++桌面程序开发

本专题聚焦 C++ 在桌面端图形界面应用开发中的实战应用,系统讲解 Qt 框架的信号与槽机制、界面布局管理、事件响应、数据交互、样式美化与多窗口应用设计等核心知识。通过实战案例(如记事本应用、数据管理工具、系统监控面板),帮助学习者掌握 从UI设计到完整桌面软件开发的C++工程化能力。

1554

2025.10.23

C++ 图形界面开发基础(Qt方向)
C++ 图形界面开发基础(Qt方向)

本专题系统讲解 使用 C++ 与 Qt 进行图形界面(GUI)开发的核心技能,内容涵盖 Qt 项目结构、窗口组件、信号与槽机制、事件处理、布局管理、资源管理,以及跨平台编译与打包流程。通过多个小型桌面应用实战案例,帮助学习者掌握从界面设计到功能实现的完整 GUI 开发能力。

1461

2025.12.05

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1158

2023.09.04

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

5205

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

2210

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

199

2026.03.17

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7339

2023.08.02

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn