用 C 中以秒为单位的时钟测量执行时间不起作用

Measuring execution time with clock in sec in C not working

我正在尝试使用 clock() 在 linux 下使用以下方法测量 C 中的执行时间:

#include <time.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char const* argv[])
{
  clock_t begin, end;
  begin = clock();
  sleep(2);
  end = clock();
  double spent = ((double)(end-begin)) / CLOCKS_PER_SEC;
  printf("%ld %ld, spent: %f\n", begin, end, spent);
  return 0;
}

输出为:

1254 1296, spent: 0.000042

文档说将时钟时间除以 CLOCKS_PER_SEC 以获得以秒为单位的执行时间,但这对于 2 秒 sleep.

似乎很不正确

有什么问题?

睡眠几乎不需要执行时间。该程序只需要安排它的唤醒时间,然后让自己进入睡眠状态。当它处于休眠状态时,它不会执行。当它被唤醒时,它根本不需要做任何事情。这一切只需要一秒钟的时间。

睡眠时间更长并不需要更多的执行时间。所以当程序不执行时有 2 秒的时间段这一事实没有影响。

clock 测量 CPU 时间(至少 Linux)。休眠进程不消耗 CPU 时间。

如果您想像使用秒表一样测量时间间隔,而不管您的进程在做什么,请使用 clock_gettimeCLOCK_MONOTONIC

man clock() 有答案:

The clock() function returns an approximation of processor time used by the program.

这清楚地表明 clock() returns 程序使用的处理器时间,而不是您期望的程序总 运行 时间,通常使用 gettimeofday.