0

0

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

尼克

尼克

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

|

191人浏览过

|

来源于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 
#include 

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

// ⚙️ 这里放待测代码,例如:
for (volatile int i = 0; i < 1000000; ++i) {} // 防优化

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

}

封装成可复用的计时器类

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

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

超会AI
超会AI

AI驱动的爆款内容制造机

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

简易实现:

#include 
#include 
#include 

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;

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(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-cppgoogle/benchmark 提供结构化微基准测试能力

相关文章

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

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

下载

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

相关专题

更多
视频后缀名都有哪些
视频后缀名都有哪些

视频后缀名都有avi、mpg、mpeg、rm、rmvb、flv、wmv、mov、mkv、ASF、M1V、M2V、MPE、QT、VOB、RA、RMJ、RMS、RAM、等等。更多关于视频后缀名的相关知识,详情请看本专题下面的文章,php中文网欢迎大家前来学习。

3306

2023.10.31

C++ Qt图形开发
C++ Qt图形开发

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

64

2025.08.15

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

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

31

2025.12.05

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

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

377

2023.09.04

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

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

69

2025.09.18

python 全局变量
python 全局变量

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

91

2025.09.18

string转int
string转int

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

311

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

510

2024.08.29

笔记本电脑卡反应很慢处理方法汇总
笔记本电脑卡反应很慢处理方法汇总

本专题整合了笔记本电脑卡反应慢解决方法,阅读专题下面的文章了解更多详细内容。

1

2025.12.25

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6万人学习

Git 教程
Git 教程

共21课时 | 2.2万人学习

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

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号