總結UNIX/LINUX下C++程式計時的方法_C 語言

來源:互聯網
上載者:User

前言

良好的計時器可協助程式開發人員確定程式的效能瓶頸,或對不同演算法進行效能比較。但要精確測配量序的已耗用時間並不容易,因為進程切換、中斷、共用的多使用者、網路流量、快取訪問及轉移預測等因素都會對程式計時產生影響。

下面看看小編為大家整理幾個計時方法

方法一:

如果是想統計某個程式的已耗用時間,那麼可以使用

time ./a.out

方法二:

如果是想對某個函數或者語句進行計時,那麼有別的方法。比如說,gettimeofday函數。直接貼範例程式碼:

#include <sys/time.h>void f(){ //...}int main(){ struct timeval t1, t2; gettimeofday(&t1, NULL); f(); gettimeofday(&t2, NULL); //那麼函數f運行所花的時間為 //deltaT = (t2.tv_sec-t1.tv_sec) * 1000000 + t2.tv_usec-t1.tv_usec 微秒 return 0;}

gettimeofday只能精確到微秒,並且它受系統時鐘的影響(它的原理就是通過讀取系統時鐘,因此當計時的這段時間裡有其他程式修改了系統時鐘,那麼結果將不準確)。

如果想精確到納秒呢?繼續往下看:

方法三:

#include <time.h>void f(){ //...}int main(){ timespec t1, t2; clock_gettime(CLOCK_MONOTONIC, &t1); f(); clock_gettime(CLOCK_MONOTONIC, &t2); //那麼f所花時間為 //deltaT = (t2.tv_sec - t1.tv_sec) * 10^9 + t2.tv_nsec - t1.tv_nsec 納秒 return 0;}

這裡說的都是wall clock,如果想獲得cpu執行時間,以及瞭解clock_gettime參數的解釋和可能的取值,可以man一下。

總結

以上就是在UNIX/LINUX下C++程式計時的方法的全部內容,希望本文的內容對大家學習使用C++程式能有所協助。如有疑問歡迎大家留言討論。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.