精华内容
下载资源
问答
  • 在完成编译原理的实验时,想比较用链表和哈希表共同执行一段程序的时间是否有差异,最开始使用函数如下: main() { clock_t start = 0; clock_t end = 0; double time; int i; start = clock(); yylex...

    在完成编译原理的实验时,想比较用链表和哈希表共同执行一段程序的时间是否有差异,最开始使用函数如下:

    main()
    {
      clock_t start = 0;   
      clock_t end = 0;   
      double time;
      int i;
      start = clock();   
    
      yylex();
    
      end = clock();   
      time = (double)(end - start)/CLOCKS_PER_SEC;/*#define CLOCKS_PER_SEC ((clock_t)1000)*/
    
      printf("\n执行时间%fsecond\n",time);
    
    }

    但由于程序太小,时间显示出来全是0.00000……查到可以用Linux附带的函数,所以就尝试了一下,

    使用命令:

    time ./test.out

    结果显示如下:

    real    0m0.026s
    user    0m0.012s
    sys    0m0.008s

    下面转载的文章详细地介绍了time出来显示的“real”“user”“sys”的真正含义。


    http://laiwei.net/2010/06/19/%E7%90%86%E8%A7%A3linux-time%E5%91%BD%E4%BB%A4%E7%9A%84%E8%BE%93%E5%87%BAwhat-do-real-user-and-sys-mean-2/

    Linux中time命令,我们经常用来计算某个程序的运行耗时,用户态cpu耗时,系统态cpu耗时。

    例如:

    $ time foo 
    real        0m0.003s
    user        0m0.000s
    sys         0m0.004s$

    那么这三个时间都具体代表什么意思呢?

    [1] real : 表示foo程序整个的运行耗时,可以理解为foo运行开始时刻你看了一下手表,foo运行结束时,你又看了一下手表,两次时间的差值就是本次real 代表的值

    举个极端的例子如下:可以看到real time恰好为2秒。

    # time sleep 2

    real    0m2.003s

    user    0m0.000s

    sys     0m0.000s

    [2] user   0m0.000s:这个时间代表的是foo运行在用户态的cpu时间,什么意思?

    首先,我来讲一下用户态和核心态:

    核心态(Kernel Mode)

          在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,由操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。

           —– In Kernel mode, the executing code has complete and unrestricted access to the underlying hardware. It can execute any CPU instruction and reference any memory address. Kernel mode is generally reserved for the lowest-level, most trusted functions of the operating system. Crashes in kernel mode are catastrophic; they will halt the entire PC.

    用户态(User Mode)

          在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的,底层的APIs来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃(Crash),系统是可以恢复的。我们大多数的代码都是运行在用户态的。

          —– In User mode, the executing code has no ability to directly access hardware or reference memory. Code running in user mode must delegate to system APIs to access hardware or memory. Due to the protection afforded by this sort of isolation, crashes in user mode are always recoverable. Most of the code running on your computer will execute in user mode.

    为什么要区分Kernel Mode 和 User Mode

         隔离保护,使得系统更稳定。

    好,讲完用户态和核心态之后,我们来看user time,说过了,这个指的是程序foo运行在用户态的cpu时间,cpu时间不是墙上的钟走过的时间,而是指CPU工作时间。

    [3] sys   0m0.004s : 这个时间代表的是foo运行在核心态的cpu时间。

     

    好,讲完上面的这些,我们来看看这三个的关系,这三者之间没有严格的关系,常见的误区有:

    误区一: real_time = user_time + sys_time

           我们错误的理解为,real time 就等于 user time + sys time,这是不对的,real time是时钟走过的时间,user time 是程序在用户态的cpu时间,sys time 为程序在核心态的cpu时间。

    利用这三者,我们可以计算程序运行期间的cpu利用率如下:

    %cpu_usage = (user_time + sys_time)/real_time * 100%

    如:

    # time sleep 2

    real     0m2.003s

    user    0m0.000s

    sys     0m0.000s

    cpu利用率为0,因为本身就是这样的,sleep 了2秒,时钟走过了2秒,但是cpu时间都为0,所以利用率为0

    误区二:real_time > user_time + sys_time

    一般来说,上面是成立的,上面的情况在单cpu的情况下,往往都是对的。

    但是在多核cpu情况下,而且代码写的确实很漂亮,能把多核cpu都利用起来,那么这时候上面的关系就不成立了,例如可能出现下面的情况,请不要惊奇。

    real 1m47.363s

    user 2m41.318s

    sys 0m4.013s

    误区三:real_time < user_time + sys_time

    一般来讲不会有人闯入这个误区^^

     

    参考资料:理解time的输出



    展开全文
  • 文章目录C语言计算函数运行时间 C语言计算函数运行时间 #include <time.h> double time1=(double)clock()/CLOCKS_PER_SEC; double time2=(double)clock()/CLOCKS_PER_SEC; printf("%lf\n",double(time2-...

    C语言计算函数运行时间

    #include <time.h>
    double time1=(double)clock()/CLOCKS_PER_SEC;
    double time2=(double)clock()/CLOCKS_PER_SEC;
    printf("%lf\n",double(time2-time1));
    

    随机数

    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    	int a = rand();
    	printf("%d\n",a);
    	return 0;
    }
    
    • rand() 随机生位于 0 ~ RAND_MAX 之间的整数。
    • RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。
    • C语言标准并没有规定 RAND_MAX 具体多少,只规定它的值至少为 32767。
    • 我们也不用知道 RAND_MAX 具体值,当做一个很大的数即可。

    随机数的本质

    • 发现每次产生的随机数都一样,为什么随机数并不随机呢?

    • rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。

    重新播种

    • 可以通过 srand() 函数来重新“播种”,这样种子就会发生改变。srand() 的用法为:
    void srand(unsigned int seed);
    
    • 可用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同。
    • 用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main() {
        int a;
        srand((unsigned)time(NULL));
        a = rand();
        printf("%d\n", a);
        return 0;
    }
    
    展开全文
  • c语言 计算函数执行时间

    千次阅读 2012-04-20 09:31:26
    linux c语言 计算函数执行时间 虽然在linux下我们可以用time命令来计算一个执行程序的时间,可是time命令会把输入输出时间一并计算在内,对于计算函数执行时间并不精确,所以写出以下代码计算函数的执行时间: ...

    linux c语言 计算函数执行时间

    虽然在linux下我们可以用time命令来计算一个执行程序的时间,可是time命令会把输入输出时间一并计算在内,对于计算函数执行时间并不精确,所以写出以下代码计算函数的执行时间:

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

    int main()
    {
            struct timeval tpstart,tpend;
            float timeuse;
            int i;
            gettimeofday(&tpstart,NULL);

            scanf("%d", &i);
                  /*这里计算的是scanf函数的执行时间,就是从函数执行到命令行输入回车的时间。*/

            gettimeofday(&tpend,NULL);
            timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+
            tpend.tv_usec-tpstart.tv_usec;
            timeuse/=1000000;
            printf("Used Time:%f\n",timeuse);
            return(0);
    }

    通用方法1:
    #include   <time.h>  
       
      time_t   start,   end;  
      time(&start);  
      ...  
      time(&end);  
       
      cout<<end-start;

    方法2:
    有许多专门的测试工具,测试的准确性很高,本文说的是一些简单的测试方法,这些方法多数是记录CPU的运行时间,没有考虑操作系统的分时复用,不过不太严格的情况都可一用。

    1.  #include <time.h>
    long start=clock(),end(0);
    //ToDo:process code
    end=clock();
    long result=(end-start)/1000

    2.  windows 平台
    #include <windows.h>
    double start=getticktime(),end(0);
    //ToDo:process code
    end=getticktime();
    double result=end-start;

    3.windows 平台
    #include <windows.h>
        LARGE_INTEGER  frequency,start,end;  
        QueryPerformanceFrequency(&frequency);  
        QueryPerformanceCounter(&start);  
     //ToDO:process code
        QueryPerformanceCounter(&end);  
        double   d   =   (double)(end.QuadPart   -   start.QuadPart)   /   (double)frequency.QuadPart   *   1000.0;

    4.根据线程而来的
    CThreadTime   ElapsedTime;  
      ElapsedTime.BeginGetElapsedTime();  
       
      //TODO:   Your   performance   code  
       
      int   nThreadTine   =   ElapsedTime.EndGetElapsedTime();  
       
       
      该类的实现如下:  
      //   This   class   is   for   getting   the   elapsed   thread   time   of   the   CPU,   the   unit   is   ms  
      //   the   usage   is:    
      //    
      //   CThreadTime   ElapsedTime;  
      //   ElapsedTime.BeginGetElapsedTime();  
      //   TODO:   Your   performance   code  
      //   int   nThreadTine   =   ElapsedTime.EndGetElapsedTime();  
      //  
       
       
      #include   <Windows.h>  
       
      class   CThreadTime  
      {  
      public:          
              void         BeginGetElapsedTime();  
              __int64   EndGetElapsedTime();  
       
      private:  
              __int64   FileTimeToQuadWord(PFILETIME   pft);  
       
      private:  
              FILETIME   ftKernelTimeStart;  
              FILETIME   ftKernelTimeEnd;  
              FILETIME   ftUserTimeStart;  
              FILETIME   ftUserTimeEnd;  
              FILETIME   ftDummy;  
      };  
       
      //   Get   the   time   elapsed   since   the   thread   start  
      inline   void   CThreadTime::BeginGetElapsedTime()  
      {  
              GetThreadTimes(GetCurrentThread(),   &ftDummy,   &ftDummy,   &ftKernelTimeStart,   &ftUserTimeStart);  
      }  
       
      //   Calculate   the   time   elapsed    
      inline   __int64   CThreadTime::EndGetElapsedTime()  
      {  
              GetThreadTimes(GetCurrentThread(),   &ftDummy,   &ftDummy,   &ftKernelTimeEnd,   &ftUserTimeEnd);  
       
              __int64   qwKernelTimeElapsed   =   FileTimeToQuadWord(&ftKernelTimeEnd)   -   FileTimeToQuadWord(&ftKernelTimeStart);  
              __int64   qwUserTimeElapsed   =   FileTimeToQuadWord(&ftUserTimeEnd)   -   FileTimeToQuadWord(&ftUserTimeStart);  
       
              //   Get   total   time   duration   by   adding   the   kernel   and   user   times.  
              //   the   default   is   100ns,   so   we   convert   it   to   ms  
              return   (qwKernelTimeElapsed   +   qwUserTimeElapsed)   /   10000;  
      }  
       
      inline   __int64   CThreadTime::FileTimeToQuadWord(PFILETIME   pft)    
      {  
              return   (Int64ShllMod32(pft->dwHighDateTime,   32)   |   pft->dwLowDateTime);  
      }

    在linux下计算程序执行时间:
    $ time ./program

    展开全文
  • c语言计算函数消耗时间: #include <sys/time.h>#include <unistd.h> struct timeval tv1, tv2; double sec =0; gettimeofday(&tv1, 0); HEGGTOPCOLLECTOR hTopCollector = ...

      c语言计算函数消耗时间:

     

     
    #include <sys/time.h>
    #include <unistd.h>

    struct timeval tv1, tv2;
    double sec =0;
    gettimeofday(
    &tv1, 0);

    HEGGTOPCOLLECTOR hTopCollector
    = eggTopCollector_new(0); // top 10

    gettimeofday(
    &tv2, 0);
    sec
    = (double)(tv2.tv_sec - tv1.tv_sec) + (double)(tv2.tv_usec - tv1.tv_usec) /1000000;
    printf(
    "time1: %f\n", sec);

     

    转载于:https://www.cnblogs.com/wangkangluo1/archive/2011/06/07/2074357.html

    展开全文
  • 如下的内容内容是关于C语言计算函数执行的时间的内容。 struct timeval start, end, delta; assert(gettimeofday(&start, NULL) != -1); for (int i = 0; i < LAPS; i++) test_function(); assert...
  • #include “stdio.h” #include “time.h” int main( void ) { clock_t start, end; double use_seconds; start = clock(); unsigned int i = 0xffffffff; while( i-- ); end = clock();... use_...
  • c语言常用时间函数

    2013-07-02 20:56:43
    本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间计算和显示格式等方面进行了阐述。
  • #include #include #include int main() { struct timeval tpstart,tpend; float timeuse; int i; gettimeofday(&tpstart,NULL); scanf("%d", &i); /*这里计算
  • C语言时间函数

    千次阅读 2011-10-31 08:23:57
    C语言时间函数 2007-05-01 09:57 http://blog.fjut.com.cn/user1/wang/archives/2006/2.html windows和linux下的时间函数是有点差别的,在这些资料中都没有区别开,这里分开讨论。 通用的:clock_t和...
  • c语言时间函数精度

    千次阅读 2010-12-26 22:52:00
    1 使用time_t time( time_t * timer ) 精确到秒 2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒 3 计算时间差使用double difftime( time_t timer1, time_t timer0 ) 4 使用...
  • 在我们时间编程的时候,难免会遇到时间函数,在项目中计算现在时间以及程序中某个动作运行的时间都需要用到时间函数,在大多数入门级别的C语言以及C++语言书籍中很少提及到,大多时候需要在网上查询,今天小编在工作...
  • C语言 时间函数

    2014-04-14 16:26:12
    C语言中关于时间函数 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time....
  • 星期几计算函数,周几计算 ,礼拜几...* 函数功能: 根据时间计算星期几 * 输入参数: pTime 时间 ssmmhhDDMMYY * Format 格式,0--BCD码,1--BIN格式 * 输出参数: 无 * 返 回 值: 星期 1~7 -- 星期一至星期日;0 失败 .
  • C语言时间函数应用 摘要 本文从介绍基础概念入手探讨了在C/C++中对日期和时间操作所用到的数据结构和函数并对计时时间的获取时间的计算和显示格式等方面进行了阐述本文还通过大量的实例向你展示了time.h头文件中声明...
  • C语言时间函数总结

    2021-06-01 16:55:22
    日常编程过程中经常会用到日期和时间,我们常常需要对日期和时间进行转换和处理,C语言time.h中为我们提供了这些函数。 一、时间的概念 通用协调时间(UTC, Universal Time Coordinated):是一个全球通用的时间标准,...
  • C语言时间函数

    2012-09-13 10:14:26
    C语言中关于时间函数 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h...
  • c语言时间函数

    2013-12-03 19:09:07
    本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和...
  • C语言计算时间差小程序

    千次阅读 2020-04-13 17:19:35
    1.打开Dev C++ 2.编写代码 1 #include <stdio.h> 2 void main(){ 3 //定义4个int类型的变量 4 int hour1,minute1;... 6 //输入输出函数 7 printf("输入起始与开始时间:"); 8 sc...
  • C语言时间函数应用

    2012-12-29 09:26:10
    C语言时间函数应用 摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time...
  •  但是变量在计算中复杂程度远不仅仅止于此  我们从变量值存在的时间角度,可以把变量分为:静态变量、动态变量  我们从变量作用范围的角度可以把变量分为:全局变量、局部变量  还有一种...
  • C语言获取时间与时间函数

    千次阅读 2013-10-17 22:06:25
    C语言中关于时间函数 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h...
  • 在很多情况下,为了评判...C语言中有两个相关的函数用来计算时间差,分别是: time_t time( time_t *t) 与 clock_t clock(void) 头文件: time.h 计算的时间单位分别为: s , ms  time_t 和 clock_t 是函数库time.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 863
精华内容 345
关键字:

c语言计算时间函数

c语言 订阅