程序內(nèi)如何計(jì)算一個(gè)函數(shù)的執(zhí)行時(shí)間?
關(guān)于時(shí)間的文章,大家可以參考我之前的一篇文章《C語(yǔ)言操作時(shí)間函數(shù),實(shí)現(xiàn)定時(shí)執(zhí)行某個(gè)任務(wù)小程序》
0、問(wèn)題描述
粉絲想計(jì)算一個(gè)函數(shù)的執(zhí)行時(shí)間。

一、問(wèn)題分析
函數(shù)的執(zhí)行時(shí)間的統(tǒng)計(jì)在嵌入式系統(tǒng)中會(huì)被頻繁的用到,知識(shí)點(diǎn)很重要。本文從兩個(gè)方面來(lái)討論類似的問(wèn)題:
程序內(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來(lái)實(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開(kāi)始計(jì)時(shí),中間時(shí)刻如果系統(tǒng)時(shí)間被用戶改成其他,則對(duì)應(yīng)的時(shí)間相應(yīng)改變
CLOCK_M(jìn)ONOTONIC:從系統(tǒng)啟動(dòng)這一刻起開(kāi)始計(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
我們先來(lái)實(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ù)放置在此處。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-

落地?zé)o錫!京東首個(gè)物流機(jī)器人超級(jí)工廠來(lái)了
-

OpenAI發(fā)布的AI瀏覽器,市場(chǎng)為何反應(yīng)強(qiáng)烈?
-

馬云重返一線督戰(zhàn),阿里重啟創(chuàng)始人模式
-

機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-

存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-

長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-

豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-

字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
最新活動(dòng)更多
-
即日-5.20立即下載>> 【限時(shí)免費(fèi)】物理場(chǎng)仿真助力生物醫(yī)學(xué)領(lǐng)域技術(shù)創(chuàng)新
-
精彩回顧立即查看>> 【直播】 智測(cè)未來(lái)·2026海克斯康春季產(chǎn)品創(chuàng)新日
-
精彩回顧立即查看>> 【線下論壇】新唐科技×芯唐南京 2026 年度研討會(huì)
-
精彩回顧立即查看>> OFweek 2026(第十五屆)中國(guó)機(jī)器人產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 維科杯· OFweek 2025中國(guó)機(jī)器人行業(yè)年度評(píng)選
-
精彩回顧立即查看>> 【在線會(huì)議】液冷服務(wù)器信號(hào)完整性及冷卻液關(guān)鍵電參數(shù)測(cè)試
推薦專題
- 1 AI狂歡遇上油價(jià)破百,全球股市還能漲多久? | 產(chǎn)聯(lián)看全球
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實(shí)測(cè):中文穩(wěn)、細(xì)節(jié)炸,設(shè)計(jì)師慌了
- 3 6000億美元估值錨定:字節(jié)跳動(dòng)的“去單一化”突圍與估值重構(gòu)
- 4 Tesla AI5芯片最新進(jìn)展總結(jié)
- 5 連夜測(cè)了一波DeepSeek-V4,我發(fā)現(xiàn)它可能只剩“審美”這個(gè)短板了
- 6 熱點(diǎn)丨AI“瑜亮之爭(zhēng)”:既生OpenClaw,何生Hermes?
- 7 AI界的殺豬盤:9秒刪庫(kù)跑路,全員被封號(hào),還繼續(xù)扣錢!
- 8 2026,人形機(jī)器人只贏了面子
- 9 DeepSeek降價(jià)90%:價(jià)格屠夫不是身份,是戰(zhàn)略
- 10 AI Infra產(chǎn)業(yè)鏈卡在哪里了?
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市


分享





