【问题标题】:C (time.h) clock_t = clock() producing wrong durationC (time.h) clock_t = clock() 产生错误的持续时间
【发布时间】:2021-10-18 13:12:48
【问题描述】:

一些示例代码:

clock_t clock_start = clock();

for( ... ) { ... do stuff ... }

clock_t clock_stop = clock();

double duration = 1000.0 * (clock_stop - clock_start) / CLOCKS_PER_SEC;
printf("time: %f ms\n", duration);

当我运行这段代码时,它产生了以下输出:

time: 4756.869000 ms

这显然是错误的。我估计实际花费的时间约为 10 秒,并通过秒表验证了这一点。

似乎缺少大约 2 - 3 个因素。

CLOCKS_PER_SEC 是否可能在我的系统上被定义为无意义的东西? (我使用的是带有 Raspberry Pi OS 的 Raspberry Pi 3。)有什么方法可以检查吗?还是更有可能是其他原因导致了问题。

我知道在 posix 系统上测量时间的替代方法。无论如何,我将使用其中一个作为可能的替代方案来实施一些测试。

【问题讨论】:

  • "一些示例代码:"请把它变成minimal reproducible example
  • @Yunnosch A MWE 在这里显然是无关紧要的,而且提供也不可能或不切实际。

标签: c time raspberry-pi


【解决方案1】:

clock() 函数返回程序使用的处理器时间的近似值。

它说的是“处理器时间”,不是秒表会说的时间量。如果您想测量在现实世界中流逝的时间量,您只需要使用其他功能之一即可。

【讨论】:

  • 是的,只是设法从更多的测试中解决了这个问题——程序花费了大约 50% 的时间,这些时间由 clock() 记录,其余的我认为是系统调用之类的东西- 这很有意义,因为它与内核交互以访问某些设备。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 2021-12-29
  • 2011-06-13
  • 2010-12-31
  • 1970-01-01
相关资源
最近更新 更多