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...