C语言测试程序运行时间

来源:互联网 发布:曾梵志 知乎 编辑:程序博客网 时间:2024/06/05 16:42

一、clock_t和clock()

在标准C/C++中,最小的计时单位是一毫秒。C/C++在<time.h>中有计时函数clock(),与其相关的数据类型是clock_t。clock函数定义如下:

clock_t clock(void );

这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,可以找到它的定义,显然clock_t是一个长整型数。

#ifndef_CLOCK_T_DEFINED

typedef longclock_t;

#define_CLOCK_T_DEFINED

#endif

 

在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,用来表示一秒钟有多少个时钟计时单元,其定义如下:

#defineCLOCKS_PER_SEC ((clock_t)1000)  //CLOCKS_PER_SEC为系统自定义的

可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。举例如下,可以用函数clock()/CLOCKS_PER_SEC来计算运行时间:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

         clock_t start, finish;

         start = clock();

         finish = clock();

         total_time = (double) (finish– start) / CLOCKS_PER_SEC;

         printf(“%f seconds/n”,total_time);

}

二、struct timeval和gettimeofday()

struct timeval结构体在Linux系统中定义,在<time.h>中定义为:

structtimeval 

__time_t tv_sec;        /*Seconds. */ 

__suseconds_t tv_usec;  /*Microseconds. */ 

};

其中,tv_sec为Epoch到创建structtimeval时的秒数,tv_usec为微秒数,即秒后面的零头。

gettimeofday ()功能是得到当前时间和时区,分别写到tv和tz中,如果tz为NULL则不向tz写入。

int gettimeofday(struct timeval*tv, struct timezone *tz);

其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果。它获得的时间精确到微秒(1e-6 s)量级。举例如下,使用gettimeofday计算代码执行时间:

#incluede<sys/time.h>

 

struct timevaltv_begin, tv_end;

gettimeofday(&tv_begin,NULL);

foo();

gettimeofday(&tv_end,NULL);

total_time = (double) (tv_begin.tv_usec – tv_end.tv_usec) / 1000;

printf(“%.3f ms/n”, total_time);

 

0 0
原创粉丝点击