基礎知識 | 每日一練(171)
- 2019 年 11 月 12 日
- 筆記
基礎知識練習
士人有百折不回之真心,才有萬變不窮之妙用。立業建功,事事要從實地著腳,若少慕聲聞,便成偽果;講道修德,念念要從虛處立基,若稍計功效,便落塵情。 ——菜根譚
讀者:指針真得比數組快嗎?函數調用會拖慢程式多少?++i 比 i = i+1 快嗎?
小林:這些問題的精確回答, 跟你所用的處理器和編譯器有關。如果你必須知道, 你就得小心的給程式計時。通常, 差別是很小的, 小到要經過千萬次迭代才能看到不同。
如果可能, 查看編譯器的彙編輸出, 看看這兩種方法是否被編譯的一樣。一般的機器, 通常遍歷大的數組時, 用指針比用數組要快, 但是某些處理器就相反。函數調用, 雖然明顯比內聯程式碼要慢, 但是它對程式的模組化和程式碼清晰度的貢獻, 很少有好的理由來避免它。
在修整象 i = i + 1 這樣的程式碼前, 記住你是在跟編譯器打交道, 而不是鍵擊編程的計算器。對於 ++i, i += 1 和 i = i + 1, 任何好的編譯器都會生成完全一樣的程式碼。使用任何一種形式只跟風格有關, 於效率無關。