C语言程序执行时间计时方法汇总

C语言中程序计时方法总结

主流方法共分为如下三种

1. clock()函数

需要引用头文件 “time.h”

注:clock函数返回从开始这个程序到调用的 clock() 函数之间的CPU时钟计时单元(clock tick)数。返回值类型是 clock_t。其中 CLOCKS_PER_SEC 是一个常数,表示一秒钟有多少个时钟数。

代码:

 1 #include<time.h>
 2 
 3 int main(){
 4      clock_t start, end; 
 5      start = clock();
 6 
 7      /*...
 8         需要计时的代码
 9     ...*/
10 
11      end = clock();
12      printf("time=%f\n", (double)(end - start) / CLOCKS_PER_SEC);
13      return 0;
14 }    

使用场景:建议在Windows环境下使用

2. time(), difftime() 函数

返回从1970年1月1日00:00:00到现在经过的秒数

注:建议使用 difftime() 来计算程序执行所花时间(更精确,单位:s)

代码:

 1 #include<time.h>
 2 
 3 int main(){
 4     time_t start,end;
 5     start = time(NULL);
 6 
 7     /*...
 8         需要计时的代码
 9     ...*/
10 
11     end = time(NULL);
12     printf("time = %ds\n", difftime(end, start));
13     return 0;
14 }

 

3. gettimeoftoday() 函数

函数原型:int gettimeofday(struct timeval *tv, struct timezone *tz)

1.该函数是 Linux 系统专属函数,可以精确到微秒 (us);

2.其中参数tv是保存获取时间的结果类型,参数tz用于保存时区结果 (若不使用可以传入NULL)。

代码:

 1 #include<sys/time.h>
 2 
 3 int mian(){
 4     struct timeval start,end;
 5     gettimeofday(&start, NULL);
 6 
 7      /*...
 8         需要计时的代码
 9     ...*/
10 
11     gettimeofday(&end, NULL);
12     long timeuse = 1000000*(end.tv_sec - start.tv_sec) + end.tv_usec-start.tv_usec;
13     printf("time =%f 秒\n", timeuse/1000000)
14     return 0;
15 }    

 

总结

Linux环境下优先使用 gettimeoftoday() 方法,Windows或其他环境推荐使用 clock() 方法,第二种方法由于精确度有限,不推荐使用。

 

上一篇:序列求和


下一篇:时钟偏斜和时钟抖动