作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [請益] 宣告變數是否會花時間?
時間Wed Apr 16 22:19:10 2008
※ 引述《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)
1F:推 danielko:所以如果new馬上delete再new 裡面的內容也相同嗎? 04/17 00:08
2F:推 timrau:難講 特別是如果有constructor介入的話就更不用說了 04/17 01:26