程序内如何计算一个函数的执行时间?

一口Linux
关注

关于时间的文章,大家可以参考我之前的一篇文章《C语言操作时间函数,实现定时执行某个任务小程序》

0、问题描述

粉丝想计算一个函数的执行时间。

一、问题分析

函数的执行时间的统计在嵌入式系统中会被频繁的用到,知识点很重要。本文从两个方面来讨论类似的问题:

程序内计算一个函数的执行时间计算一个程序的执行时间

二、程序内如何计算一个函数的执行时间?

1. 思路

我们在执行函数前后分别记录下时间戳,然后计算两个时间戳的差值即可。

我们需要借助函数clock_gettime来实现这个功能。看下该函数的定义:

#include <time.h>
int clock_gettime(clockid_t clk_id, struct timespec* tp);
可以根据需要,获取不同要求的精确时间
参数:
clk_id :
检索和设置的clk_id指定的时钟时间。
CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
 CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
 CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
 CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
tp :
获取的时间戳会存放到该结构体变量中
struct timespec

        time_t tv_sec;  秒
        long tv_nsec;  纳秒
};
返回值:
成功  0
失败 -1  ,同时errno会被赋值

因为我们希望计算执行某个函数的时间,所以我们第一个参数选择CLOCK_MONOTONIC。

2. 实例1

我们先来实现一个简单的程序:

 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_MONOTONIC, &ts_start);
18    
19     printf("you can call your function here");
20    
21     //end time before call function
22     rc = clock_gettime(CLOCK_MONOTONIC, &ts_end);
23    
24     printf("CLOCK_MONOTONIC reports %ld.%09ld seconds",
25             ts_end.tv_sec - ts_start.tv_sec, ts_end.tv_nsec - ts_start.tv_nsec);
26 }

19行 我们可以将自己要执行的函数放置在此处。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存