C 中经过的时间

Posted

技术标签:

【中文标题】C 中经过的时间【英文标题】:elapsed time in C 【发布时间】: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() 不衡量时间的绝对流逝。它衡量专门花费在这一过程上的时间量。重要区别。如果你正在分析,你可能想要这个;否则你可能不会。 【参考方案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】:

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

【讨论】:

以上是关于C 中经过的时间的主要内容,如果未能解决你的问题,请参考以下文章

osx/c++/glut,添加经过时间

A,B,C,D下班过一小桥

UserControl 中经过验证的文本框

C语言中时间的函数

如何获得经过训练的 LDA 分类器的特征权重

C语言中时间的问题