记录程序运行时间之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/p/3116667.html