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)/CLOCKS_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++下测量函数运行时间的更多相关文章

  1. python测量函数运行时间长度

    python测试函数运行时间长度的方法如下 import time def measure_time(): def wraps(func): def mesure(*args,**kwargs): s ...

  2. linux下统计程序/函数运行时间(转)

    一. 使用time 命令 例如编译一个hello.c文件 #gcc hello.c -o hello 生成了hello可执行文件,此时统计该程序的运行时间便可以使用如下命令 #time ./hello ...

  3. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数009,Measure,测量函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数009,Measure,测量函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...

  4. 用SWD调试接口测量代码运行时间 ( SWO )

    用SWD调试接口测量代码运行时间 关于时间测量的种种问题 在嵌入式中,我们经常需要测量某段代码的执行时间或测量事件触发的时间,常规的思路是: 1:在测量起始点,反转电平2:在测量结束点,再次反转电平 ...

  5. [Android Memory] Linux下malloc函数和OOM Killer

    http://www.linuxidc.com/Linux/2010-09/28364.htm Linux下malloc函数主要用来在用户空间从heap申请内存,申请成功返回指向所分配内存的指针,申请 ...

  6. linux和window下mkdir函数问题(转-锦曦月)

    通过WIN32宏进行判断   window下mkdir函数   #include<direct.h> int _mkdir( const char *dirname );   linux下 ...

  7. linux下syscall函数,SYS_gettid,SYS_tgkill

    出处:http://blog.chinaunix.net/uid-28458801-id-4630215.html     linux下syscall函数,SYS_gettid,SYS_tgkill  ...

  8. hdwiki model目录下的函数类

    model目录下的函数类    actions.class.php(站内地图相关) getHTML:获得页面菜单和相关信息 getMap:生成站内地图 adv.class.php 对wiki_adve ...

  9. 对于linux下system()函数的深度理解(整理)

    原谅: http://blog.sina.com.cn/s/blog_8043547601017qk0.html 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同 ...

随机推荐

  1. 利用闭包特性改写addEventListener的回调函数

    var numClicks = 0; document.addEventListener("click",function(){ alert( ++numClicks); },fa ...

  2. 搜索6--noi1700:八皇后问题

    搜索6--noi1700:八皇后问题 一.心得 二.题目 1756:八皇后 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 会下国际象棋的人都很清楚:皇后可以 ...

  3. InnoDB并发事务

    ​目录 1.行锁:索引加锁 2.意向锁 3.间隙锁 4.MVCC机制 行锁 InnoDB通过多版本并发控制MVCC来支持事务 InnoDB的设计是为了在处理大数据量的时候得到最好的性能.InnoDB存 ...

  4. New Concept English three (52)

    My cousin, Harry, keeps a large curiously-shaped bottle on permanent display in his study. Despite t ...

  5. Debian For ARM Webmin Server

    /******************************************************************************** * Debian For ARM W ...

  6. (转)Linux sort命令

    Linux 的 ‘sort’命令的14个有用的范例(一) 2015-5-2 10:29    评论: 3 收藏: 10 编译自:http://www.tecmint.com/sort-command- ...

  7. HDU - 5126 stars (CDQ分治)

    题目链接 题目大意:一共有Q(1<=Q<=50000)组操作,操作分为两种: 1.在x,y,z处添加一颗星星 2.询问以(x1,y1,z1)与(x2,y2,z2)为左上和右下顶点的矩形之间 ...

  8. 转载:jquery插件实现图片延迟加载(lazyload.js)

    转载: http://www.cnblogs.com/tinyphp/archive/2013/04/09/3009385.html

  9. [Luogu3674]小清新人渣的本愿

    luogu 题意 给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...

  10. 【模板】【学习笔记】noip数学

    一.素数 欧拉筛 void prime(){ check[]=; ;i<=n;i++){ if(!check[i])prim[++cnt]=i;//这个if语句后面没有大括号!! ;j<= ...