C語言獲取程式執行時間
所需標頭檔案:"time.h"
所需函式:clock
函式原型:
clock_t __cdecl clock(void);
函式介紹:
用於獲取程式啟動時間到這次呼叫clock函式的CPU佔用時間
其在time檔案裡還有一個巨集叫#define CLOCKS_PER_SEC ((clock_t)1000)
用於衡量秒的單位,1000也就是千分之一秒,也就是當過了一毫秒clock會自動增加1
在其他作業系統下可能各有不同,但是可以經過時間匯率換算出相應的秒差,在計算之前可以用printf列印看一下
返回值:
clock_t //long 長整型
用法:
clock_t start, finish; //定義第一次呼叫CPU時鐘單位的實際,可以理解為定義一個計數器 double Total_time; //定義一個double型別的變數,用於儲存時間單位 start = clock(); //獲取進入要測試執行時間程式碼段之前的CPU時間佔用值
int i = 100000L;while (i--); //迴圈 0假
finish = clock(); //獲取執行完後的CPU時間佔用值Total_time = (double)(finish - start) / CLOCKS_PER_SEC; //單位換算,換算成毫秒printf("\n函式執行時間:%0.3f毫秒 \n", Total_time); //列印小數點的後三位,毫秒為單位,計算機最低以皮秒-納秒等為最低單位getchar();return 0;執行結果:
這裡要解釋一下這段程式碼
Total_time = (double)(finish - start) / CLOCKS_PER_SEC; //單位換算,換算成毫秒
上面說過clock是獲取程式啟動到呼叫clock這個函式時所用的CPU佔用時間,怎麼獲取?
答:PCB程序控制塊裡有一個clock_t 的成員變數,當你程式獲取到CPU控制權時該值會不斷遞增,不以秒為單位以CPU赫茲執行你程式碼頻率為單位的遞增!
clock會把這個值並根據巨集定義的CLOCKS_PER_SEC來進行毫秒單位轉換,假如clock_t是1000,那麼CLOCKS_PER_SEC也是1000,clock就會返回給你1毫秒!
clock以毫秒為單位
這裡我們要計算的是要測試的程式碼執行時間,而非程式執行時間!
所以我們要把程式執行要測試的程式碼之前的時間段儲存下來:
start = clock(); //獲取進入要測試執行時間程式碼段之前的CPU時間佔用值
然後在執行,執行完以後在程式總執行時間
int i = 100000L;while (i--); //迴圈 0假 finish = clock(); //獲取執行完後的CPU時間佔用值
最後在用程式總執行時間減去程式執行要測試程式碼段之前的執行時間的時間得到程式執行要測試程式碼的時間!
Total_time = (double)(finish - start) / CLOCKS_PER_SEC; //單位換算,換算成毫秒
後面的除去CLOCKS_PER_SEC,因為clock_t是長整型 long,返回的是整形,所以這裡我們要以(double)型別轉換以浮點數型別返回,然後除去1000,得到毫秒單位!
假如finish是135毫秒(上面說clock函式會根據PCB程序控制塊裡的clock_t成員變數值以1000為換算單位,換算成毫秒),start是75毫秒,程式碼段執行時間是60毫秒(135-75),如果直接以double型別返回就是60.00000000,除去換算單位:1000,也就得到:0.06000000,也就是60毫秒,列印時0.3f,用於控制列印輸出格式,因為我們只要小數點後三位,1秒=1000毫秒,即可得出換算單位!