在 C 中测量经过的时间?

Measure elapsed time in C?

所以, 我想看看我的代码中的函数需要多长时间才能达到 运行。 (实时)。 最初,我有这个:

clock_t begin = clock();
my_function();
clock_t end = clock();
double time_spent = (double)(end - begin);

但显然,这种方法存在一些问题。

  1. 它只衡量 cpu 处理我的申请所用的时间。
  2. 据我所知,它仅在微秒级测量 - 这对我的情况来说不够精确。

那么,获取函数执行 运行 所用时间的正确方法是什么? CPU time 真的是正确的方法吗?我能测量多精确?我在想纳秒级?

C 标准没有定义执行此操作的可移植方法。 time() 库函数定义为 1 秒,这不适合您的目的。正如@Puck 所提到的,C11 确实引入了 timespec_get() 来检索更精确的时间值,但此功能并未得到广泛支持,可能无法提供预期的准确性。

其他功能在选定的系统上可用:

但是请注意,执行精确可靠的亚微秒基准测试至少可以说是一项艰巨的任务。

所以,你应该问问自己是否真的需要纳秒级别。处理器 运行 的时钟速率为 GHz 级,这意味着一条指令的执行时间为纳秒级。这意味着纳秒精度的测量极其复杂(如果不是不可能的话)。

C11 附带了新的 timespec_get,可以让您获得纳秒分辨率的时间,但肯定不是那么准确。

如果你的目标是测量一个函数的执行时间,你最好的选择当然是在一个循环中调用你的函数,循环执行它一千次,你以微秒的精度测量它,这肯定更接近于纳秒的精度比任何声称是纳秒的计时器都要准确。