看板 EE_DSnP 關於我們 聯絡資訊
※ 引述《danielko (蛋尼爾糕)》之銘言: : 我以前寫for迴圈的時候都是這樣 : for(int i=0; i<Size; i++) { : ... : } : 不過後來看到很多人都會把i, j等等counter在迴圈外面宣告 : 例如 : int i, j, k; : for(i=0; i<Size; i++) : for(j=0; j<Size; j++) : for(k=0; k<Size; k++) : 這樣看起來是只要一開始宣告i, j, k各一次就好了 這樣子的 performance difference, 應該會是非常的 marginal, 所以不應該是考慮的重點. 很多書上會建議將 variables 宣告的 "as local as possible" --- 雖然這樣子有可能會影響到一點執行速率, 但是宣告成 local variable 有以下好處: 避免 data contamination. 比方說在你的例子裡, 如果 i 被幾個不同的 for 迴圈共同使用, 或者是他被其他的 code 也用到, 那就有可能不小心將 i 的值弄爛掉. 換個角度想, 如果你覺得 i 應該就是給這個 for 迴圈使用的, 那麼將它宣告成 local 那麼它就跟其他的 i 一點關係也沒有了, 這樣子的 code 會比較不容易出錯. : 我的問題是這樣在執行上會比較快嗎?? :另外一個好像也有點相關 :如果我在迴圈裡面宣告一個char [] :好像下次進來迴圈的時候新宣告的也會在同一個記憶體位置耶 :這樣好像裡面的東西都還是跟離開迴圈的時候一模一樣 :等於說新宣告的其實不是乾淨的? 不是很瞭解你 "不是很乾淨" 的意思... 兩次 for loop 時變數記憶體位置相同其實是很合理的, 因為 local variable 在離開 scope 時本來就會被 "release", 但是因為 for loop 又馬上進來, 所以當然又是同樣的記憶體位置又被 allocate 了一次... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.131.113 ※ 編輯: ric2k1 來自: 59.121.131.113 (04/16 22:23)
danielko:所以如果new馬上delete再new 裡面的內容也相同嗎? 04/17 00:08
timrau:難講 特別是如果有constructor介入的話就更不用說了 04/17 01:26