歡迎使用CSDN markdown編輯器

2021-07-02 22:51:49 字數 1364 閱讀 5195

linux/unix環境下計算c程式執行時間可以通過clock, times, gettimeofday, getrusage來實現。—-

下邊分別說明其優缺點:

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也是不錯的,尤其是考慮到它的通用性。

首先接觸的是gettimeofday,下邊詳細介紹這個函式的使用方法:

包含標頭檔案sys/time.h.

2.定義兩個結構體 struct timeval start、struct timeval end及記錄時間的變數timer.

將gettimeofday(&start,null)放在需要測的**的開始部分,將gettimeofday(&end,null)放在需要測的**的結束部分.

4.語句timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec可以使timer記錄**執行時間(時間單位為us).

5.printf(「timer = %ld」,timer) 列印出timer的值.

#include 

#include

int main()

歡迎使用CSDN markdow

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

歡迎毛毛與妞妞使用CSDN markdown編輯器

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

歡迎使用CSDN markdow1n編輯器

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...