#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()来计算经过的时间。
答案 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)
您的代码运行时间不到一秒。