2011年11月25日 星期五

Effective C++ item 30: 了解 inline

之前寫的《C++ inline 用法背後的原因》有一點小錯, 原來也有可在連結時期做 inline 的建置環境, 如 .NET CLI。另外提到 template 的實作通常要也要寫在 header 裡, 理由同 inline, 這樣 compiler 才知道怎麼具現化它。

此外, 這則條款提到 inline 的特性只是建議, 不是強制行為。並強調 inline 的缺點有

  • 若函式有點大且頻繁地使用, inline 後 object code 會變很大。可以想見會浪費硬碟空間和記憶體, 也可能更容易造成記憶體換頁而減低 instruction cache hit rate。
  • 在更改 inline 後的函式時, 使用到 inline 函式的 object code 必須重編。若沒用 inline 且是使用 dynamic linking 的話, 可以完全不動客戶端的程式。
  • 大部份 debugger 不支援設中斷點

第一點的負擔比較難評估, 第二、三點到是滿顯見的問題。所以結論是, 除簡單的 getter 或 max / min 這類小函式, 盡量別用 inline, 直到發覺某個小函式占據可觀比例的執行時間後, 再考慮使用 inilne。

沒有留言:

張貼留言

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...