關於clock 函式計時

2022-07-02 05:24:07 字數 2001 閱讀 4861

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

#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*/

分析: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...