2011-05-30 55 views
3
#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。我不了解错误的来源。在C中花费的时间

同样,使用时间(开始)和时间(结束)或开始=时钟()和结束=时钟()来计算经过的时间会更好。

+0

你可以发布你正在计时的代码吗?只要你不需要高精度的时间,看起来你正在计时。 – 2011-05-30 18:06:26

+1

这对我来说很好。您是否使用调试器验证了开始和结束的值? (注意:为了测试它,我在时间(开始)和时间(结束)之间放置了一个“睡眠(1)”。) – Tom 2011-05-30 18:07:14

+0

如果您需要更精细的分辨率进行时间测量,是否尝试过'clock()'? – sverre 2011-05-30 18:08:28

回答

6

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

0

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

消褪的时间是1.00秒。

4

如果你想使用clock()确保你明白它测量CPU时间只。另外,要转换为秒,则需要除以CLOCKS_PER_SEC

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) 
0

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