C++ 计时

2023-03-24 10:44:48 浏览数 (1)

C 中计时是度量系统性能的常用方法,本文记录 C 常用计时方法。

time.h

time.h 是最常用的 C 计时头文件,在 C 中,计时通常使用 <time.h> 头文件中的 clock() 函数记录CPU 单元的运行周期时间,可以在 Windows / Linux 等操作系统中使用,配合 CLOCKS_PER_SEC 实现对真实事件单位秒(s)等的转换。

  • 两次调用 clock() 函数,差值表示程序运行开始和结束时刻之间的CPU时钟计时单元(clock tick)数;
  • CLOCKS_PER_SEC,表示一秒钟会有多少个时钟计时单元(clock tick);
  • 设差值为 durationduration / CLOCKS_PER_SEC 就为秒。
数据类型

计时得到的常用数据类型是 clock_ttime_t, 在 time.h 文件中,我们可以找到对它们的定义:

  • clock_t
代码语言:javascript复制
#ifndef _CLOCK_T_DEFINED 

  typedef long clock_t; 

  #define _CLOCK_T_DEFINED 

  #endif

说明 clock_t 类型本质就是 long 类型

  • time_t
代码语言:javascript复制
typedef long                          __time32_t;
typedef __int64                       __time64_t;

#ifndef _CRT_NO_TIME_T
    #ifdef _USE_32BIT_TIME_T
        typedef __time32_t time_t;
    #else
        typedef __time64_t time_t;
    #endif
#endif

说明 time_t 可能是 32 位整形或 64 位整形

  • 总之时间本质就是一个大整形数据
计时间隔

一个 clock 表示一个计时间隔,每经过一个计时间隔的时间这个计时的整数会增加 1

计时间隔 和真实时间的联系靠的是 CLOCKS_PER_SEC,这个宏的含义是一秒钟有多少个计时间隔

在定义中 CLOCKS_PER_SEC 是 1000

代码语言:javascript复制
#define CLOCKS_PER_SEC  ((clock_t)1000)

也就表示一个 计时间隔 表示 1ms 的时间

示例代码
代码语言:javascript复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>

using namespace std;


int main(void)
{
    long    i = 100000000L;
    time_t start, finish;
    double  duration;
    /* 测量一个事件持续的时间*/
    printf("Time to do %ld empty loops is ", i);
    start = clock();
    while (i--)
        ;
    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    printf("%f secondsn", duration);
    return 0;
}

输出

代码语言:javascript复制
Time to do 100000000 empty loops is 0.148000 seconds

参考资料

  • https://blog.csdn.net/suyunzzz/article/details/108038939
  • https://blog.csdn.net/qq_45779334/article/details/127980542
  • https://blog.csdn.net/qq_41680771/article/details/121178263

文章链接:

https://cloud.tencent.com/developer/article/2245187

0 人点赞