訂閱
糾錯(cuò)
加入自媒體

程序內(nèi)如何計(jì)算一個(gè)函數(shù)的執(zhí)行時(shí)間?

關(guān)于時(shí)間的文章,大家可以參考我之前的一篇文章《C語(yǔ)言操作時(shí)間函數(shù),實(shí)現(xiàn)定時(shí)執(zhí)行某個(gè)任務(wù)小程序》

0、問題描述

粉絲想計(jì)算一個(gè)函數(shù)的執(zhí)行時(shí)間。

一、問題分析

函數(shù)的執(zhí)行時(shí)間的統(tǒng)計(jì)在嵌入式系統(tǒng)中會(huì)被頻繁的用到,知識(shí)點(diǎn)很重要。本文從兩個(gè)方面來討論類似的問題:

程序內(nèi)計(jì)算一個(gè)函數(shù)的執(zhí)行時(shí)間計(jì)算一個(gè)程序的執(zhí)行時(shí)間

二、程序內(nèi)如何計(jì)算一個(gè)函數(shù)的執(zhí)行時(shí)間?

1. 思路

我們?cè)趫?zhí)行函數(shù)前后分別記錄下時(shí)間戳,然后計(jì)算兩個(gè)時(shí)間戳的差值即可。

我們需要借助函數(shù)clock_gettime來實(shí)現(xiàn)這個(gè)功能?聪略摵瘮(shù)的定義:

#include <time.h>
int clock_gettime(clockid_t clk_id, struct timespec* tp);
可以根據(jù)需要,獲取不同要求的精確時(shí)間
參數(shù):
clk_id :
檢索和設(shè)置的clk_id指定的時(shí)鐘時(shí)間。
CLOCK_REALTIME:系統(tǒng)實(shí)時(shí)時(shí)間,隨系統(tǒng)實(shí)時(shí)時(shí)間改變而改變,即從UTC1970-1-1 0:0:0開始計(jì)時(shí),中間時(shí)刻如果系統(tǒng)時(shí)間被用戶改成其他,則對(duì)應(yīng)的時(shí)間相應(yīng)改變
 CLOCK_M(jìn)ONOTONIC:從系統(tǒng)啟動(dòng)這一刻起開始計(jì)時(shí),不受系統(tǒng)時(shí)間被用戶改變的影響
 CLOCK_PROCESS_CPUTIME_ID:本進(jìn)程到當(dāng)前代碼系統(tǒng)CPU花費(fèi)的時(shí)間
 CLOCK_THREAD_CPUTIME_ID:本線程到當(dāng)前代碼系統(tǒng)CPU花費(fèi)的時(shí)間
tp :
獲取的時(shí)間戳?xí)娣诺皆摻Y(jié)構(gòu)體變量中
struct timespec

        time_t tv_sec;  秒
        long tv_nsec;  納秒
};
返回值:
成功  0
失敗 -1  ,同時(shí)errno會(huì)被賦值

因?yàn)槲覀兿M?jì)算執(zhí)行某個(gè)函數(shù)的時(shí)間,所以我們第一個(gè)參數(shù)選擇CLOCK_M(jìn)ONOTONIC。

2. 實(shí)例1

我們先來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的程序:

 1 #include <stdio.h>                                                              
 2 #include <stdlib.h>
 3 #include <stdint.h>
 4 #include <time.h>
 5 #include <sys/time.h>
 6 #include <sys/stat.h>
 7 #include <sys/types.h>
 8 #include <unistd.h>
 9 #include <string.h>
10
11 int main()
12 {
13     int rc;
14     struct timespec ts_start, ts_end;
15    
16     //start time before call function
17     rc = clock_gettime(CLOCK_M(jìn)ONOTONIC, &ts_start);
18    
19     printf("you can call your function here");
20    
21     //end time before call function
22     rc = clock_gettime(CLOCK_M(jìn)ONOTONIC, &ts_end);
23    
24     printf("CLOCK_M(jìn)ONOTONIC reports %ld.%09ld seconds",
25             ts_end.tv_sec - ts_start.tv_sec, ts_end.tv_nsec - ts_start.tv_nsec);
26 }

19行 我們可以將自己要執(zhí)行的函數(shù)放置在此處。

1  2  下一頁(yè)>  
聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評(píng)論

暫無評(píng)論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號(hào)
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)