c语言统计运行时间,c语言统计函数运行时间

  c语言统计运行时间,c语言统计函数运行时间

  目前还没有一种方法可以精确的测量一个程序的运行时间,但是有两种方法可以估算:一种是基于定时器的,另一种是基于计数器的。

  1)基于定时器的测量方法

  缺点:精度不够,不能用于程序运行时长小于100ms的测量。

  优点:精度对系统负载依赖不是很大,执行时间大于1s时程序与理论值误差很低。

  方法:在程序开始时读取定时器的内容,在程序终止前再次读取定时器的内容。

  界面功能:

  (1)Unix/Linux

  clock _ t times(struct TMS * buf);

  //返回值:系统启动后经过的时间的滴答数,常量CLK_TCK表示每秒钟时钟的滴答数。

  //参数:指向tms结构的指针

  //使用此函数时包含头文件

  (2)Win32

  DWORD GetTickCount(VOID)

  //返回值:系统启动后经过的毫秒数。

  //使用时,应该包括

  //链接阶段应该链接kernel32.lib

  (3)平台可移植代码

  clock_t时钟(无效)

  //常量CLOCKS_PER_SEC保证此函数返回值的格式为秒。

  //使用此函数时包含头文件

  /////////////////////C

  #包括

  使用命名空间std

  ///////////////////////////////////////////

  clock_t开始,结束;

  双倍时长;

  start=时钟();

  //在此键入您测试过的代码

  finish=clock();

  duration=(double)(finish-start)/CLOCKS _ PER _ SEC;

  printf("%f秒\n ",持续时间);

  系统(“暂停”);//经典的程序挂起方法

  2)基于计数器的测量方法

  缺点:只能用汇编语言读取,不能保证通用性。在系统负载较重的情况下,会大大影响精度。

  优点:准确性高,并且由于获得了程序执行时的时钟周期数,可以大致估算出程序在不同硬件平台上的执行时间。

  方法:在IA32架构中,cpu内部有一个名为“时间戳”的64位无符号数计数器,用来存储CPU上电以来的时钟周期数。

  (1)WIN32

  QueryPerformanceCouter函数读取64位计数器。

  (2)当前的一些编译器不支持RDTSC指令。如果在这个编译器下,你可以使用__emit指令来绕过编译器的执行,并且你应该加上:

  # define CPUID _ _ ASM _ _ emit 0fh _ _ ASM _ _ emit 0a2h

  #定义RDTSC _ _ ASM _ _ emit 0fh _ _ ASM _ _ emit 031h

  微软的C/C编译器从6.0版本开始就支持CPUID和RDTSC指令,因此可以将汇编代码直接嵌入到程序中。这里有一个简单的例子:

  #包括

  int main()

  {

  无符号整数循环,I;

  __asm

  {

  CPUID

  读取时间标记计数器

  mov周期,eax

  }

  for(I=0;我10000;我)

  ;

  __asm

  {

  CPUID

  读取时间标记计数器

  子eax,循环

  mov周期,eax

  }

  printf(程序持续周期=%d\n ,cycle);

  返回0;

  }

  由于基于计数器的测量方法受多种因素影响,主要是上下文切换和指令缓存的影响,高精度计时必须尽量消除上述两种因素的影响。对于上下文切换,主要是在一个低负载的机器上进行多次计算和平均,而对于指令缓存,则多是预先加载待测代码段的指令,然后进行度量。

  详见《计算机系统:程序员的视角》(第7章)。

  示例:

  1 #包含“time.h”

  2

  3//时间变量和时间函数

  4c lock _ t t start=0;

  五

  六

  7void设置时间()

  8 {

  9t start=clock();

  10}

  11

  12

  13double Gettime()

  14 {

  15 return(double)((double)clock()(double)t start)/(double)CLOCKS _ PER _ SEC;

  16}

  17

  18

  19

  20int main()

  21{

  22 Settime();//开始计时

  23 /**//****

  24做点什么****/

  25

  2 cout -监控需要时间:";

  27 cout Gettime()endl;

  28

  29返回1;

  30}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: