clock tick:時鐘計時單元(而不把它叫做時鐘滴答次數),乙個時鐘計時單元的時間長短是由cpu控制的,
乙個clock tick不是cpu的乙個時鐘週期,而是c/c++的乙個基本計時單位。
clock函式:clock_t clock(); 這個函式返回從「開啟這個程式程序」到「程式中呼叫clock()函式」時之間
的cpu時鐘計時單元 (clock tick)數,在msdn中稱之為掛鐘時間(wal-clock)。
clock_t定義:#ifndef _clock_t_defined
typedef long clock_t;
#define _clock_t_defined
#endif
#define clocks_per_sec ((clock_t)1000):
可以看到每過千分之一秒(1毫秒),呼叫clock()函式返回的值就加1
**:main.c
1分析:l20:如果寫成(double)((finish - start) / clocks_per_sec)這種形式,一般情況下這個值會為0.0000#include
<
stdio.h
>
2#include
<
time.h
>34
intbinsearch(
intx,
intv,
intn);56
intmain()7;
10int
tag =8
;11intres;
12clock_t start;
13clock_t finish;
1415
start
=clock();
16res
=binsearch(tag, num,
11);
17finish
=clock();
18printf(
"%ld, %ld\n
", start, finish);
19printf(
"%d\n%f\n
", res, (
double
)(finish
-start)
/clocks_per_sec);
20//
而非(double)((finish - start) / clocks_per_sec)
2122
return0;
23}2425
intbinsearch(
intx,
intv,
intn)
//折半查詢
2644
45return-1
;46}47
48/*
#include
49#include
5051
int main()
52*/
因為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...