【问题标题】:elapsed time in CC 中经过的时间
【发布时间】:2011-05-30 18:02:05
【问题描述】:
#include <time.h> 
time_t start,end; 
time (&start);
//code here
time (&end); 
double dif = difftime (end,start); 
printf ("Elasped time is %.2lf seconds.", dif ); 

我的开始时间和结束时间都是 0.000。我不明白错误的来源。

使用 time(start) 和 time(end) 还是 start=clock() 和 end=clock() 来计算经过的时间更好。

【问题讨论】:

  • 你能发布你正在计时的代码吗?只要您不需要高精度计时,您的计时似乎是正确的。
  • 这对我来说很好。您是否使用调试器验证了 start 和 end 的值? (注意:为了测试它,我在时间(开始)和时间(结束)之间放置了一个“睡眠(1)”。)
  • 如果您需要更高分辨率的时间测量,您是否尝试过clock()
  • @sverre: clock() 不衡量时间的绝对流逝。它衡量专门花费在这一过程上的时间量。重要区别。如果你正在分析,你可能想要这个;否则你可能不会。

标签: c time elapsed


【解决方案1】:

在大多数(几乎所有?)系统上,time() 的粒度仅为一秒,因此无法用它测量任何亚秒级的时间长度。如果您使用的是 Unix,请尝试改用 gettimeofday

【讨论】:

    【解决方案2】:

    如果您确实想使用 clock(),请确保您了解它仅测量 CPU 时间。此外,要转换为秒,您需要除以CLOCKS_PER_SEC

    【讨论】:

      【解决方案3】:

      代码的简短摘录通常不会花费足够长的时间来运行用于分析目的。一种常见的技术是多次(数百万)次重复调用,然后将结果时间增量除以迭代计数。伪代码:

      计数 = 10,000,000 开始 = 读取当前时间() 循环计数次数: 我的代码() 结束 = 读取当前时间() elapsedTotal = 结束 - 开始 elapsedForOneIteration = elapsedTotal / 计数

      如果您想要准确性,可以忽略循环开销。例如:

      循环计数次数: 我的代码() 我的代码() 并测量 elapsed1(2 x 计数迭代 + 循环开销) 循环计数次数: 我的代码() 并测量 elapsed2 (计数迭代 + 循环开销) actualElapsed = elapsed1 - elapsed2 (计算迭代次数——因为其余的项被取消了)

      【讨论】:

        【解决方案4】:

        time (最多)有第二个分辨率。如果您的代码运行的时间远少于此,您可能不会看到差异。

        使用分析器(例如 *nix 上的 gprof,OS X 上的 Instruments;对于 Windows,请参阅“Profiling C code on Windows when using Eclipse”)对代码进行计时。

        【讨论】:

          【解决方案5】:

          您在两次测量之间使用的代码运行速度过快。刚试过你的代码打印数字从 0 到 99,999,我得到了

          经过的时间是 1.00 秒。

          【讨论】:

            【解决方案6】:

            您的代码运行时间不到一秒。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-08-23
              • 1970-01-01
              • 2012-11-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多