在C中经过的时间

时间:2011-05-30 18:02:06

标签: c time elapsed

#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()来计算经过的时间。

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

count = 10,000,000

start = readCurrentTime()

loop count times:
    myCode()

end = readCurrentTime()

elapsedTotal = end - start
elapsedForOneIteration = elapsedTotal / count

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

loop count times:
    myCode()
    myCode()
and measure elapsed1 (2 x count iterations + loop overhead)

loop count times:
    myCode()
and measure elapsed2 (count iterations + loop overhead)

actualElapsed = elapsed1 - elapsed2
(count iterations -- because rest of terms cancel out)

答案 3 :(得分:0)

time(最多)有第二个分辨率。如果你的代码运行得比这少得多,你就不太可能看到差异。

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

答案 4 :(得分:0)

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

  

拉伸时间是1.00秒。

答案 5 :(得分:0)

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