測試程式執行時間 time h

2021-05-23 22:26:54 字數 2346 閱讀 1325

1.計時

c/c++中的計時函式是clock(),而與其相關的資料型別是clock_t。在msdn中,查得對clock函式定義如下:

clock_t clock( void );

這個函式返回從「開啟這個程式程序」到「程式中呼叫clock()函式」時之間的cpu時鐘計時單元(clock tick)數,在msdn中稱之為掛鐘時間(wal-clock)。其中clock_t是用來儲存時間的資料型別,在time.h檔案中,我們可以找到對它的定義:

#ifndef _clock_t_defined

typedef long clock_t;

#define _clock_t_defined

#endif

很明顯,clock_t是乙個長整形數。在time.h檔案中,還定義了乙個常量clocks_per_sec,它用來表示一秒鐘會有多少個時鐘計時單元,其定義如下:

#define clocks_per_sec ((clock_t)1000)   //clocks_per_sec為系統自定義的}

在筆者的機器上,執行結果如下:

time to do 10000000 empty loops is 0.03000 seconds

上面我們看到時鐘計時單元的長度為1毫秒,那麼計時的精度也為1毫秒,那麼我們可不可以通過改變clocks_per_sec的定義,通過把它定義的大一些,從而使計時精度更高呢?通過嘗試,你會發現這樣是不行的。在標準c/c++中,最小的計時單位是一毫秒。

2.與日期和時間相關的資料結構

在標準c/c++中,我們可通過tm結構來獲得日期和時間,tm結構在time.h中的定義如下:

#ifndef _tm_defined

struct tm ;

#define _tm_defined

#endif

ansi c標準稱使用tm結構的這種時間表示為分解時間(broken-down time)。

而日曆時間(calendar time)是通過time_t資料型別來表示的,用time_t表示的時間(日曆時間)是從乙個時間點(例如:2023年1月1日0時0分0秒)到此時的秒數。在time.h中,我們也可以看到time_t是乙個長整型數:

#ifndef _time_t_defined

typedef long time_t; /* 時間值 */

#define _time_t_defined /* 避免重複定義 time_t */

#endif

大家可能會產生疑問:既然time_t實際上是長整型,到未來的某一天,從乙個時間點(一般是2023年1月1日0時0分0秒)到那時的秒數(即日曆時間)超出了長整形所能表示的數的範圍怎麼辦?對time_t資料型別的值來說,它所表示的時間不能晚於2023年1月18日19時14分07秒。為了能夠表示更久遠的時間,一些編譯器廠商引入了64位甚至更長的整形數來儲存日曆時間。比如微軟在visual c++中採用了__time64_t資料型別來儲存日曆時間,並通過_time64()函式來獲得日曆時間(而不是通過使用32位字的time()函式),這樣就可以通過該資料型別儲存2023年1月1日0時0分0秒(不包括該時間點)之前的時間。

在time.h標頭檔案中,我們還可以看到一些函式,它們都是以time_t為引數型別或返回值型別的函式:

double difftime(time_t time1, time_t time0);

time_t mktime(struct tm * timeptr);

time_t time(time_t * timer);

char * asctime(const struct tm * timeptr);

char * ctime(const time_t *timer);

此外,time.h還提供了兩種不同的函式將日曆時間(乙個用time_t表示的整數)轉換為我們平時看到的把年月日時分秒分開顯示的時間格式tm:

struct tm * gmtime(const time_t *timer);

struct tm * localtime(const time_t * timer);

通過查閱msdn,我們可以知道microsoft c/c++ 7.0中時間點的值(time_t物件的值)是從2023年12月31日0時0分0秒到該時間點所經過的秒數,而其它各種版本的microsoft c/c++和所有不同版本的visual c++都是計算的從2023年1月1日0時0分0秒到該時間點所經過的秒數。

3. 獲得日曆時間

C 測試程式執行時間

我們應當忘記小的效能優化,百分之九十七的情況下,過早的優化都是萬惡之源 這句話在很多時候都被引用到,以至於 不要優化 注意,是 不要優化 而不是 不要過早優化 已經深入人心,過度地推崇這條建議經常會成為如下行為的藉口 還有另乙個常識 優化是不重要的,這條常識的理由,在程式設計師工具箱中最強大的優化技...

c c 測試程式執行時間

演算法分析中需要對各種演算法進行效能測試,下面介紹兩種通用的測試方法,由於只用到標準c語言函式,所以在各種平台和編譯器下都能使用。方法1 clock 函式 開始計時 start clock 結束計時 end clock start和end都是clock t型別 結果 秒 time double en...

C 測試程式執行時間

1.時間測試 datetime starttime datetime.now timespan timespan 程式主體 timespan datetime.now.subtract starttime 獲取就是開始時間很結束時間差 2.用於.net環境的時間測試 只測試 在自身程序中的時間 ne...