2010-06-10 39 views
0

有人可以解釋我在具有時鐘功能的兩個for循環之間的延遲上下文中的確切交互。在cout語句中,for1如何與for2進行交互(640000000上的30)?具有時鐘功能的for循環之間的交互作用?

start=clock(); 
cout<<endl<<start<<endl; 
for(delay=0; delay<30; delay++) 
    for(i=0; i<640000000; i++); 

end=clock(); 
cout<<end<<endl; 
cout<<"Num of ticks for non reg-loop: "; 
cout<<end-start<<'\n'; 
+1

你能更清楚地知道你在找什麼嗎? – VeeArr 2010-06-10 18:03:18

+0

我不明白如何循環完成30 * 640000000迭代,這是32位編譯器不可能處理? – highlevelcoder 2010-06-10 18:11:55

+0

爲什麼不可能? – Blindy 2010-06-10 18:15:34

回答

2

可能是一個體面的優化器會看到循環是一個空操作,完全優化它,這樣就會有起點和終點之間幾乎沒有差別。

如果沒有優化出來,這兩個循環只是解決了30 * 640000000大於可以存儲在32位整數中的事實。它運行內部640000000循環30次以嘗試放大延遲。

編輯: 所以對於每一個30倍(使用可變delay),它創建另一個循環(使用可變i)從0開始。然後,它遞增i 6.4億次,每次增量服用的時間的一小部分(如果不是優化了)。然後內循環完成,delay增加1,並且內循環再次從0開始。

EDIT2: 如果你只是想添加一個延遲,你使用sleepusleep或相應的Windows功能(S),而不是試圖實現由迭代睡眠考慮?

+0

換句話說,延遲如何實際工作? – highlevelcoder 2010-06-10 18:18:06

+0

你問的for循環是如何工作的? – daramarak 2010-06-10 19:39:29

+0

所以我增加了這麼快的thx優化器? – highlevelcoder 2010-06-10 23:32:09