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主频相对应的直接关系。。。 但是由于精度高,得到的数字浮动比较大。。

原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/62/11805062.shtml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值