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() 方法,第二種方法由於精確度有限,不推薦使用。