關於clock 函式計時

2021-06-04 15:41:10 字數 1749 閱讀 1481

clock tick:時鐘計時單元(而不把它叫做時鐘滴答次數),乙個時鐘計時單元的時間長短是由cpu控制的, 乙個clock tick不是cpu的乙個時鐘週期,而是c/c++的乙個基本計時單位。

clock函式:clock_t clock(); 這個函式返回從「開啟這個程式程序」到「程式中呼叫clock()函式」時之間 的cpu時鐘計時單元 (clock tick)數,在msdn中稱之為掛鐘時間(wal-clock)。可以通過,clock值除以clock_per_sec(將其define為1000)

clock_t定義:

#ifndef _clock_t_defined

typedef long clock_t;

#define _clock_t_defined

#endif

#define clocks_per_sec ((clock_t)1000):

**:

#include #include int binsearch(int x, int v, int n);

int main()

; int tag = 8;

int res;

clock_t start;

clock_t finish;

start = clock();

res = binsearch(tag, num, 11);

finish = clock();

printf("%ld, %ld/n", start, finish);

printf("%d/n%f/n", res, (double)(finish - start) / clocks_per_sec);

//而非(double)((

finish - start) / clocks_per_sec)

return 0;

}int binsearch(int x, int v, int n) //折半查詢

return -1;

}/*#include #include int main()

*/

可以看到每過千分之一秒(1毫秒),呼叫clock()函式返回的值就加1!

分析:l20:如果寫成(double)((finish - start) / clocks_per_sec)這種形式,一般情況下這個值會為0.0000

因為finish start clocks_per_sec均為long型變(常)量,若finish-start < 1000,則

(finish - start) / clocks_per_sec = 0,再將其強制轉換為double型資料,得到0.0000。

如果寫成(double)(finish - start) / clocks_per_sec,先會將finish - start轉換成double型

資料,然後執行"/"操作,則編譯器自動將clocks_per_sec提公升為double型,故而是兩個double資料相除

能得到正確結果。

l33:q:為什麼要加上while(i--);?

a:本機測試到每個時鐘計時單元執行了322580次上述迴圈,如果不加這個迴圈,則在瞬間就會執行完

binsearch函式,這樣得到的start,finish數值會是一樣的,故而(finish - start) = 0,

這樣會得到執行函式binsearch函式所花費的時間為0,顯然這是不對的。

原文:

關於clock 函式計時

clock tick 時鐘計時單元 而不把它叫做時鐘滴答次數 乙個時鐘計時單元的時間長短是由cpu控制的,乙個clock tick不是cpu的乙個時鐘週期,而是c c 的乙個基本計時單位。clock函式 clock t clock 這個函式返回從 開啟這個程式程序 到 程式中呼叫clock 函式 時...

C 關於計時clock

c c 中的計時函式是clock 而與其相關的資料型別是clock t。在msdn中,查得對clock函式定義如下 clock t clock void 這個函式返回從 開啟這個程式程序 到 程式中呼叫clock 函式 時之間的cpu時鐘計時單元 clock tick 數,在msdn中稱之為掛鐘時間...

C語言計時函式clock

c語言clock 函式實現計時功能 函式clock 返回值為clock t型別 乙個長整型數 它的實際意義是指 程序啟動到呼叫clock 函式經過了多少個cpu時鐘計時單元 借助clocks per sec這個常量可以把clock t轉化為以秒為單位的數值。下面是它的用法 include clock...