记录程序运行时间之clock 函数

在C语言中,提供的clock函数,由于能够返回程序运行开始的时钟数,所以计数精度高,远高于毫秒。

因此在程序运行计时时,经常是首选。 (当然time(),getrusage(), gettimeoftheday()等函数也是不错的选择。)

可是在有些机器上,经常出现计数为负数,也就是存储clock() 返回值的clock_t 数据溢出的问题。 原因在哪里呢?

查找定义可知, #define  clock_t long;因此就引发了long数据类型不在不同系统上所带了的不同位数的问题。  在64位 linux系统的机器上long的长度为8byte,因此有充足的计数空间。可是在32位linux机器,或者32/64位windows(http://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows)机器上,long的长度都是4,那么如果CLOCK_PER_SEC是1000000的话,则在(2^31-1)/1000000 seconds的时候计数值溢出, 大概2147秒的时候计数失效。

因此在使用clock()进行时间计数时需要注意这个问题。

如果linux下 最长的128位long long数据类型,用于记录时间戳读取指令rdtsc返回值的情况,溢出的问题就更不会存在。

转载于:https://www.cnblogs.com/operaculus/archive/2013/06/04/3116667.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值