使用std::chrono库中的steady_clock可高精度测量代码执行时间,通过记录开始和结束时间点并计算差值,结合多次测量取平均值可提高准确性。

在C++中测量代码执行时间,最直接且常用的方法是利用标准库提供的计时工具,例如
<chrono>
在C++中,测量代码执行时间最可靠且现代的方式是使用C++11及更高版本引入的
<chrono>
基本的工作流程是这样的:
一个常见的实践是使用
std::chrono::high_resolution_clock
high_resolution_clock
system_clock
steady_clock
steady_clock
立即学习“C++免费学习笔记(深入)”;
下面是一个使用
std::chrono::steady_clock
#include <iostream>
#include <chrono> // 引入chrono库
#include <thread> // 为了演示,引入thread库
void expensive_operation() {
// 模拟一个耗时操作
std::this_thread::sleep_for(std::chrono::milliseconds(150));
// 实际的代码逻辑...
}
int main() {
// 1. 获取开始时间点
auto start = std::chrono::steady_clock::now();
// 2. 执行你的目标代码
expensive_operation(); // 调用需要计时的函数
// 3. 获取结束时间点
auto end = std::chrono::steady_clock::now();
// 4. 计算时间差
// std::chrono::duration_cast 可以将时间间隔转换为指定单位
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
// 5. 输出结果
std::cout << "代码执行时间: " << duration.count() << " 毫秒" << std::endl;
// 也可以转换为微秒或纳秒
auto duration_us = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
std::cout << "代码执行时间: " << duration_us.count() << " 微秒" << std::endl;
return 0;
}这里我刻意用了
steady_clock
system_clock
std::chrono
std::chrono
time.h
ctime
chrono
clock()
chrono
time_point
duration
time_point
duration
chrono
然而,在使用
chrono
steady_clock
high_resolution_clock
high_resolution_clock
steady_clock
system_clock
high_resolution_clock
steady_clock
volatile
正如我刚才提到的,单次测量在性能分析中往往不够可靠。为了获得更准确、更具代表性的代码执行时间,我们通常会采取多次测量并计算统计值的方法。这不仅能减少随机噪声的影响,还能揭示代码在不同运行条件下的性能波动。
这里有一个基本的实现思路:
#include <iostream>
#include <vector>
#include <numeric> // 用于std::accumulate
#include <algorithm> // 用于std::sort
#include <chrono>
#include <thread>
void complex_calculation() {
// 模拟一个稍微复杂一点的计算
volatile long long sum = 0; // 使用volatile防止编译器过度优化
for (int i = 0; i < 100000; ++i) {
sum += i * i;
}
// 确保sum被使用,否则编译器可能优化掉循环
// std::cout << "Sum: " << sum << std::endl;以上就是如何在C++中测量代码执行时间_C++代码性能计时方法的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号