在C中存储微秒总和的正确数据类型是什么

Pet*_*row 5 c types

考虑到数量可能非常大,使用安全unsigned long吗?

FWIW,我将apache日志中的所有微秒加起来,因此数量可能会非常大.

Did*_*set 9

鉴于您可以在unsigned long32位平台上存储的最大值大约为4G,这些4G微秒仅转换为71分钟.

在64位平台上(注意Windows长度总是32位,即使在Windows 64位上),那么你可以计算微秒,最多可达到4G时间71分钟.这是巨大的:大约5800个世纪.

答:如果你unsigned long是64位,那没关系.


Mik*_*ike 6

使用标准 C 存储"非常大"数字的最佳方法是unsigned long long int:

  • unsigned long long int类型的对象的最大值
    ULLONG_MAX 18446744073709551615 // 2 64 - 1

这是在C99 +标准中定义的.如果你愿意/想要超越C可以做的事情,那么还有其他扩展需要考虑,首先想到的是GNU MP Bignum库.

我想你应该考虑第三种选择是将它分解为微秒,秒的方式gettimeofday()确实具有timeeval结构.这样你就不必进入可笑的数字.如果您想在几微秒内查看数据,您可以自己进行转换.