C語言函式執行時間測試

2022-02-06 05:09:00 字數 2298 閱讀 7988

摘自:

最近突然有必要測試c語言中各個函式的執行時間,於是就搜尋了一下,發現有4種方法可以達成測算程式執行時間的目的。

它們分別是使用clock, times, gettimeofday, getrusage來實現的。下面就來逐一介紹,並比較它們的優劣點。

系統測試環境:

virtualbox (ubuntu 9.10)

gcc version 4.4.1

libc6 2.10.1-0ubuntu16

core duo t2500 2gmhz

首先先貼出我測試用的程式吧。

程式做的處理很簡單,就是填寫乙個1024*1024的矩陣。

只要修改第11行的定義值,就可以使用不同的測量方法了。

#include #include #include #include #include #define test_by_clock           (char)(0x00)

#define test_by_times (char)(0x01)

#define test_by_gettimeofday (char)(0x02)

#define test_by_getrusage (char)(0x03)

#define test_method (test_by_gettimeofday)

#define coordination_x (int)(1024)

#define coordination_y (int)(1024)

static int g_matrix[coordination_x][coordination_y];

double gettimeval()

else if (test_method == test_by_getrusage)

return sttimeval.tv_sec + (double)sttimeval.tv_usec*1e-6;

}int main()

else if (test_method == test_by_times)

else if (test_method == test_by_gettimeofday)

else if (test_method == test_by_getrusage)

for (i = 0; i < coordination_x; i++) }

if (test_method == test_by_clock)

else if (test_method == test_by_times)

else if (test_method == test_by_gettimeofday)

else if (test_method == test_by_getrusage)

return 0;

}

使用clock的方法:

clock是ansi c的標準庫函式,關於這個函式需要說明幾點。

首先,它返回的是cpu耗費在本程式上的時間。也就是說,途中sleep的話,由於cpu資源被釋放,那段時間將不被計算在內。

其次,得到的返回值其實就是耗費在本程式上的cpu時間片的數量,也就是clock tick的值。該值必須除以clocks_per_sec這個巨集值,才能最後得到ss.mmnn格式的執行時間。在posix相容系統中,clocks_per_sec的值為1,000,000的,也就是1mhz。

最後,使用這個函式能達到的精度大約為10ms。

使用times的方法:

times的用法基本和clock類似,同樣是取得cpu時間片的數量,所不同的是要除以的時間單位值為sysconf(_sc_clk_tck)。

使用gettimeofday的方法:

用gettimeofday直接提取硬體時鐘進行運算,得到的結果的精度相比前兩種方法提高了很多。

但是也正由於它提取硬體時鐘的原因,這個方法只能計算程式開始時間和結束時間的差值。而此時系統中如果在執行其他的後台程式,可能會影響到最終結果的值。如果後台繁忙,系統dispatch過多的話,並不能完全真實反映被測量函式的執行時間。

使用getrusage的方法:

getrusage得到的是程式對系統資源的占用資訊。只要指定了rusage_self,就可以得到程式本身執行所占用的系統時間。

可以說是精度最高的測量方法了。

自己試用了這四種方法,感覺需要高精度測試的話,getrusage和gettimeofday都可以選擇。需要長時間測試的話,clock也是不錯的,尤其是考慮到它的通用性。

C語言測試程式執行時間

clock t clock void 這個函式返回從 開啟這個程式程序 到 程式中呼叫clock 函式 時之間的cpu時鐘計時單元 clock tick 數,在msdn中稱之為掛鐘時間 wal clock 其中clock t是用來儲存時間的資料型別,在time.h檔案中,可以找到它的定義,顯然clo...

測試c 函式的執行時間

clock 函式返回從 開啟這個程式程序 到 程式中呼叫clock 函式 時之間的cpu時鐘計時單元 clock tick 數,在msdn中稱之為掛鐘時間 wal clock 常量clocks per sec,它用來表示一秒鐘會有多少個時鐘計時單元。比如 我想知道vector在2種情況下的執行效率 ...

C 函式執行時間

遞迴和迴圈執行時間比較 c 計算函式執行時間system.diagnostics.stopwatch或者system.datetime.now using system using system.collections.generic using system.diagnostics using s...