700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C++程序运行时间

C++程序运行时间

时间:2020-10-18 05:49:23

相关推荐

C++程序运行时间

作者:@houkai

本文为作者原创,转载请注明出处:/houkai/archive//06/06/3120768.html

在C++程序的性能分析中,其中重要的一项就是程序的运行时间。虽然程序的运行速度与计算机的配置、计算机的当前状态等有很大关系,但在相对一致的外部环境下,程序运行时间的长短在很大程度上是可以反映程序效率的。

1.一般计时方法

在ctime头文件中,C++提供了计时函数 clock() ,其返回数据类型为 clock_t。

typedef long clock_t;

clock()函数返回从“开启程序进程”到“程序中调用clock()函数”这段时间里,CPU时钟计时单元(clock tick)的数目,在MSDN中称之为挂钟时间(wal-clock)。

在ctime文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒内有多少个CPU时钟计时单元。

通过clock()/CLOCKS_PER_SEC便可以得到进程的运行时间,一般CLOCKS_PER_SEC的值为1000,可见计时精度可达小数点后3位(毫秒级)。

#define CLK_TCK CLOCKS_PER_SEC

计时的简单示例如下

/**作者:侯凯*说明:clock()计时函数*日期:-6-6*/#include <ctime> //计时用的头文件#include <iostream>using namespace std;int main(){long i = 10000000L;clock_t start, end; start = clock(); while( i-- );//需要计时的程序段end = clock(); printf("The time was: %f\n", (double)(end - start) / CLK_TCK); system("pause");return 0;}

2.精确计时方法

这里精确的含义是计时的精度更高,为了达到更高的计时精度,需要使用精确时间函数QueryPerformanceCounter()和QueryPerformanceFrequency(),它们需要计算机从硬件上支持精确定时器。当然,现在计算机一般都是支持的。

QueryPerformanceCounter()函数返回高精确度计数器的脉冲数目(计时数),QueryPerformanceFrequency()函数提供了高精度计时器的频率值,即每秒脉冲数。

bool QueryPerformanceFrequency (LARGE_INTEGER *lpFrequency);bool QueryPerformanceCounter (LARGE_INTEGER *lpCount);

其中,数据类型LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定。该类型的定义如下:

typedef union _LARGE_INTEGER{struct{DWORD LowPart ;// 4字节整型数LONG HighPart;// 4字节整型数};LONGLONG QuadPart ;// 8字节整型数}LARGE_INTEGER ;

在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。其过程与clock()方法类似,但这里的时钟频率很高,测试电脑上频率的QuadPart值为3118031,其精度原高于clocK()。

为了更好地使用这种计时方式,已将其封装成HpTime类,下载。使用该类,计时程序如下

/**作者:侯凯*说明:HpTime类高精度计时*日期:-6-6*/#include "hptime.h"#include <iostream>using namespace std;int main(){long i = 10000000L;HpTime hpTime;while( i-- );//要计时的函数段printf("The time was: %f\n", hpTime.sec()); system("pause");return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。