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() 方法,第二种方法由于精确度有限,不推荐使用。