C++ 计算 代码运行时间的 几种方法

本文介绍了几种简单的C++代码运行时间测试方法,包括使用<time.h>、windows平台的getticktime()、QueryPerformanceCounter()以及CThreadTime类。这些方法主要通过记录CPU时间来估算,适用于非严格测试场景。
 有许多专门的测试工具,测试的准确性很高,本文说的是一些简单的测试方法,这些方法多数是记录CPU的运行时间,没有考虑操作系统的分时复用,不过不太严格的情况都可一用。

1.  #include <time.h>
long start=clock(),end(0);
//ToDo:process code
end=clock();
long result=(end-start)/1000

2.  windows 平台
#include <windows.h>
double start=getticktime(),end(0);
//ToDo:process code
end=getticktime();
double result=end-start;

3.windows 平台
#include <windows.h>
    LARGE_INTEGER  frequency,start,end;  
    QueryPerformanceFrequency(&frequency);  
    QueryPerformanceCounter(&start);  
 //ToDO:process code
    QueryPerformanceCounter(&end);  
    double   d   =   (double)(end.QuadPart   -   start.QuadPart)   /   (double)frequency.QuadPart   * 
<think>我们注意到用户在上一次的问题中要求获取在C++计算程序或代码运行时间的示例。根据引用[2]中的内容,提到了测量经过时间(elapsedtime)的整体方法,即在代码段周围放置计时器。在C++中,常用的计时方式有几种,包括使用标准库中的<chrono>头文件(C++11及以上),或者使用传统的clock()函数(来自<ctime>)等。下面提供几个常见的测量代码运行时间的示例:1.使用C++11的<chrono>库(推荐):#include<iostream>#include<chrono>intmain(){//开始计时autostart=std::chrono::high_resolution_clock::now();//待测量的代码段//...//结束计时autoend=std::chrono::high_resolution_clock::now();//计算时间差(单位:秒)std::chrono::duration<double>duration=end-start;//输出运行时间std::cout<< "代码运行时间:"<< duration.count()<< "秒"<< std::endl;return0;}2.使用C语言的clock()函数(需要包含<ctime>):#include<iostream>#include<ctime>intmain(){//开始计时clock_tstart=clock();//待测量的代码段//...//结束计时clock_tend=clock();//计算时间差(单位:秒)doubleduration=(double)(end-start)/CLOCKS_PER_SEC;//输出运行时间std::cout<< "代码运行时间:"<< duration<< "秒"<< std::endl;return0;}注意:clock()函数测量的是CPU时间(即程序占用CPU的时间),而<chrono>库的high_resolution_clock通常测量的是挂钟时间(实际经过的时间)。如果程序中有等待(如I/O阻塞或睡眠),那么两者会有较大差异。3.对于C++旧标准,可以使用<sys/time.h>(在Unix-like系统中):#include<iostream>#include<sys/time.h>intmain(){structtimevalstart,end;//获取开始时间gettimeofday(&start,NULL);//待测量的代码段//...//获取结束时间gettimeofday(&end,NULL);//计算时间差(单位:秒)doubleduration=(end.tv_sec-start.tv_sec)+(end.tv_usec-start.tv_usec)/1000000.0;std::cout<< "代码运行时间:"<< duration<< "秒"<< std::endl;return0;}其中,方法1(C++11)是跨平台的,推荐使用。方法3主要适用于Unix-like系统。此外,在引用[3]中提到了在初始化过程中需要注意的问题(尽管是关于Crypto++的,但我们这里不涉及),在测量时间时,我们通常不需要担心这些。因此,建议用户使用第一种方法,即C++11的<chrono>库。下面是一个完整的示例,测量一个简单循环的运行时间:```cpp#include<iostream>#include<chrono>intmain(){//开始计时autostart=std::chrono::high_resolution_clock::now();//模拟一个耗时的操作longlongsum=0;for(longlongi=0;i<1000000000;i++){sum+=i;}//结束计时autoend=std::chrono::high_resolution_clock::now();//计算时间差(单位:秒)std::chrono::duration<double>elapsed=end-start;std::cout<< "代码运行时间:"<< elapsed.count()<< "秒"<< std::endl;std::cout<< "计算结果:"<< sum<< std::endl;//防止被优化return0;}```注意:编译器优化可能会将没有实际效果的代码移除。为了避免这种情况,我们输出了计算结果(sum)。如果需要更高精度的计时(例如纳秒),可以使用std::chrono::nanoseconds,但通常duration<double>以秒为单位并带小数部分已经足够。最后,引用[2]中提到了在C++AMP代码中放置计时器,但用户的问题是一般的C++代码,所以我们提供了通用的方法。希望这些示例能帮助用户。</think> 在 C++ 中测量代码运行时间主要有以下几种方法,以下给出完整示例和说明: ### 方法一:使用 C++11 `<chrono>` 库(推荐) ```cpp #include <iostream> #include <chrono> int main() { // 开始计时点 auto start = std::chrono::high_resolution_clock::now(); // ░░░░ 待测量代码段 ░░░░ volatile long sum = 0; // volatile 防止优化 for(int i = 0; i < 100000000; ++i) { sum += i * i; } // ░░░░ 代码段结束 ░░░░ // 结束计时点 auto end = std::chrono::high_resolution_clock::now(); // 计算时间差 auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start); std::cout << "执行耗时: " << duration.count() << " 微秒"; return 0; } ``` ### 方法二:使用 POSIX `clock_gettime()`(Linux/Unix) ```cpp #include <iostream> #include <ctime> int main() { timespec start, end; clock_gettime(CLOCK_MONOTONIC, &start); // 开始计时 // ░░░░ 待测量代码段 ░░░░ int arr[10000]; for(int i = 0; i < 10000; ++i) { arr[i] = i * 2; } // ░░░░ 代码段结束 ░░░░ clock_gettime(CLOCK_MONOTONIC, &end); // 结束计时 // 计算纳秒差 long ns = (end.tv_sec - start.tv_sec) *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值