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主频 绝对应的直接关系 。 。 。 然而因为精度高,得到的数字浮动 比较大 。 。 |