2011-05-30 52 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

您的代碼運行時間不到一秒鐘。