You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

glibc中clock()基于times实现的单位差异困惑:是否理解有误?

关于glibc中clock()实现及时间单位的疑问解答

你找到的这段代码确实是glibc中clock()函数的正确实现。

你疑惑的CLOCKS_PER_SEC与sysconf(_SC_CLK_TCK)数值差异问题,根源在于glibc对__times做了封装处理,并非直接返回内核原始的times()系统调用结果:

  • 内核层面的times()系统调用,返回的tms_utime和tms_stime以系统时钟滴答为单位,该单位由sysconf(_SC_CLK_TCK)定义(你的环境中为100,即每10毫秒一个滴答)。
  • 但glibc提供的__times封装函数,会自动将内核返回的数值按比例缩放,转换为以CLOCKS_PER_SEC为单位的值(你的环境中为1000000,即微秒级精度)。

正因为这个内部转换,clock()函数可以直接返回tms_utime与tms_stime的总和,完全符合POSIX标准对clock()的要求——返回值除以CLOCKS_PER_SEC即可得到程序消耗的总CPU时间(秒)。

举个实际计算的例子:如果内核返回tms_utime为50(对应50×10ms=0.5秒),__times会将其转换为500000;tms_stime为30(对应0.3秒),转换后为300000。clock()返回两者之和800000,除以CLOCKS_PER_SEC(1000000)就得到0.8秒,与实际CPU时间完全匹配。

内容的提问来源于stack exchange,提问作者Yui Rio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:56:04