码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++下测量函数运行时间

时间:2017-11-14 16:22:27      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:测试   保存时间   之间   写法   markdown   blog   main   结果   编译   

C/C++下测量函数运行时间

time.h介绍

C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。

clock_t clock( void );

这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:

#ifndef _CLOCK_T_DEFINED 
 typedef long clock_t; 
#define _CLOCK_T_DEFINED 
#endif

很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

#define CLOCKS_PER_SEC ((clock_t)1000) //CLOCKS_PER_SEC为系统自定义的

可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。

写法

#include<stdio.h>
#include<time.h>

int main()
{
  clock_t cBeg=clock();
  //···
  //调用函数
  //···
  clock_t cEnd=clock();
  printf("program exection time: %.3f\n",(double)(cEnd-cBeg)/CLOCK_PER_SEC);
  return 0;
}

例子

#include<stdio.h>
#include<time.h>

//直接递归
long long fib1(int n)
{
    if(n==1||n==0)
        return 1;
    else
        return fib1(n-1)+fib1(n-2);
}

//尾递归
long long fib2(int n,long long f,long long s)
{
    if(n<2)
        return s;
    else
        return fib2(n-1,s,f+s);
}

//迭代
long long fib3(int n)
{
    long long f=1;
    long long g=0;
    while(n--)
    {
        f=f+g;
        g=f-g;
    }
    return f;
}

int main()
{
    clock_t tBeg,tEnd;
    tBeg=clock();
    printf("%lld\n",fib1(40));
    tEnd=clock();
    printf("fib1 execution time: %.3f s\n",(double)(tEnd-tBeg)/CLOCKS_PER_SEC);

    tBeg=clock();
    printf("%lld\n",fib2(40,1,1));
    tEnd=clock();
    printf("fib1 execution time: %.3f s\n",(double)(tEnd-tBeg)/CLOCKS_PER_SEC);

    tBeg=clock();
    printf("%lld\n",fib3(40));
    tEnd=clock();
    printf("fib1 execution time: %.3f s\n",(double)(tEnd-tBeg)/CLOCKS_PER_SEC);
}

执行结果如下:

技术分享

(尾递归由于编译器优化和迭代比直接递归快很多)

另外,linux下可直接 time ./执行程序测试时间。

C/C++下测量函数运行时间

标签:测试   保存时间   之间   写法   markdown   blog   main   结果   编译   

原文地址:http://www.cnblogs.com/yueshangzuo/p/7832960.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!