C++中获取高精度时间差


  解决一个问题通常有多种 步骤, 我们总想找到最高效的,所以需求对照不同算法执行所用的 工夫 。惋惜的是,C++中提供的 步骤普通不得不准确到毫秒级 。

  提供一种更加准确的 步骤 。编写一个函数, 可以在C++中这样写:

  __declspec (naked) unsigned __int64 GetCpuCycle( void )

  {

  _asm

  {

  rdtsc

  ret

  }

  }

  RDTSC的返回值 存放在EDX EAX中, EDX为高32位,EAX为低32位 。这里的 RDTSC 指令( Read Time Stamp Counter ), 获得CPU的高精度 工夫戳 。

  这样以来我们就 可以在随处 获得目前的CPU自上电以来的 工夫周期数了:

  unsigned __int64 iCpuCycle = GetCpuCycle();

  依据这个数字我们 可以计算出上电以来所 经历的 工夫( 秒s ):

  second = iCpuCycle / CPU主频率( HZ );

  1GHZ = 1,000 MHZ = 1,000,000 KHZ = 1,000,000,000 HZ;

  猎取两次作差就 可以得到运行的 工夫了 。其实没必要换算成 工夫,关注差值就行了 。

  PS:

   可以 释怀一个unsigned __int64 不会溢出 - - 可以计算一下你的CPU能 保留多少年的 工夫 。 。

  依据这一 步骤有几个 好处: 一是精度高,二是函数调用开销最小,三是平台 制约小,四是 存在和CPU主频 绝对应的直接关系 。 。 。 然而因为精度高,得到的数字浮动 比较大 。 。