C_使用clock()函數獲取程序執行時間


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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM