clock():捕捉從程序開始運行到clock()被調用時所耗費的時間。這個時間單位是clock tick ,即“時鍾打點”。
常數CLK_TCK:機器時鍾每秒所走的時鍾打點數。
1 #include <stdio.h> 2 #include <time.h> 3 4 colck_t start, stop; 5 /* clock_t 是clock() 函數返回的變量類型*/ 6 7 double duration; 8 /* 記錄被測函數運行時間,以秒為單位*/ 9 10 int main() 11 { 12 /*不在測試范圍內的准備工作寫在clock()調用之前*/ 13 start = clock(); /* 開始計時 */ 14 MyFunction(); /* 把被測函數加在這里 */ 15 stop = clock(); /* 停止計時 */ 16 duration = ((double)(stop - start))/CLK_TCK; 17 18 /* 其他不在測試范圍的處理寫在后面,eg:輸出duration的值*/ 19 }
實驗_eg:執行下面打印一次“Hello World!”的時間
注意:因為程序執行的太快,所以顯示為0;
1 #include <stdio.h> 2 #include <time.h> 3 void hello(); 4 int main(){ 5 clock_t start, stop; 6 double duration; 7 start = clock(); 8 hello(); 9 stop = clock(); 10 duration = ((double)(stop - start))/CLK_TCK; 11 printf("該程序運行的時間是:%f\n",duration); 12 return 0; 13 } 14 void hello(){ 15 printf("Hello World!\n"); 16 }
解決方案:讓被測函數重復運行充分多次,使得測出的總的時鍾打點間隔充分長,最后計算被測函數平均運行的時間。
1 #include <stdio.h> 2 #include <time.h> 3 4 #define MAXK 1e5 /* 被測函數最大重復調用次數 */ 5 6 void hello(); 7 int main(){ 8 int i; 9 clock_t start, stop; 10 double duration; 11 start = clock(); 12 for(i=0; i<MAXK; i++){ 13 hello(); 14 } 15 stop = clock(); 16 duration = ((double)(stop - start))/CLK_TCK/MAXK; 17 18 printf("duration = %f\n",duration);//0.00003s左右 19 return 0; 20 } 21 22 void hello(){ 23 printf("Hello world!"); 24 }