【问题标题】:Timing a function in C在 C 中为函数计时
【发布时间】:2014-01-25 19:35:44
【问题描述】:

我试图找出在 C 中执行函数所需的时间。 我正在尝试的是以下内容:

#include <time.h>

time_t start;
time_t finish;
double seconds;

time(&start);
FUNCTION
time(&finish);

seconds = difftime(finish,start);

printf("Time taken is %.f", seconds);

但是,不同函数的返回值始终相同:1389133144 秒。

有什么帮助吗? 谢谢!

【问题讨论】:

  • 您是否确认了 time() 的 retval?
  • 您收到任何编译警告吗?如果你不包括stdio.h,那么printf 可能会被隐式原型化为采用int 参数并有损地投射你的双打。
  • @tommyo 你是什么意思? time() 不应该给你当前的日历时间吗?
  • @evilotto 不,我也包括了 stdio.h,我只是没有把它们放在这段代码中。完全没有编译器错误。
  • 请粘贴您的真实代码。您得到的值 - 1389133144 - 可疑地接近当前的 unix 时间。

标签: c function time


【解决方案1】:

我常用的其他方法是这样的:

#include <sys/time.h>

//this is from http://www.cs.usfca.edu/~peter/ipp/
#define GET_TIME(now) { \
   struct timeval t; \
   gettimeofday(&t, NULL); \
   now = t.tv_sec + t.tv_usec/1000000.0; \
}

//in your code
double start, end;
GET_TIME(start);
//... do some stuff...
GET_TIME(end);

printf("TOTAL TIME = %f secs\n", end-start);

【讨论】:

  • 我正在使用你的方法,但现在,我得到的只是0秒
  • 奇怪,我现在已经测试过在 ...do some stuff 部分中放置一个 for 循环 (for(int i=0;i
  • 如果你得到 0 可能是正确的,你的函数不需要时间来运行
  • 我的错!我将完成和开始都乘以 1000000 并得到了结果 :) 非常感谢!
  • 我倾向于避免在 GET_TIME 宏中进行计算;我尽量减少第一次和第二次通话之间的无关活动。否则,我做的和你做的差不多。请注意,如果在测试运行时调整了系统时钟(可能是通过 NTP 或 SNTP 守护程序),这可能会造成混淆/混淆。如果您有clock_gettime(),您可以使用 CLOCK_MONOTONIC 来避免此类问题。
【解决方案2】:

time 函数返回自 Epoch 1970-01-01 00:00:00 +0000 (UTC) 以来的秒数。如果参数不是NULL,它还会在其中存储时间。

1389133144 实际上是一个相当合理的时间戳,它是 2014-01-07 22:19:04。

但是,time 函数不是测量函数运行时间的好工具,因为精度非常低。考虑使用gettimeofdayclock_gettime 或简单的clock,所有这些都应该更精确。

【讨论】:

    【解决方案3】:

    问题不在于时间计算,而在于printf() 语句的格式说明符。您正在使用“%.f”,您可能需要“%f”。这 。在这种情况下意味着精度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-23
      • 2013-01-08
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      相关资源
      最近更新 更多