1. 程式人生 > >effective c++條款30:透徹瞭解inlining的裡裡外外

effective c++條款30:透徹瞭解inlining的裡裡外外

inline函式的優點:

1. 避免了函式呼叫帶來的額外開銷(inline函式相當於巨集定義,在編譯期就被替換到呼叫處)。

2. 編譯器會對inline函式進行最優化。

inline函式的缺點:

1. 如果inline函式過大並且多次呼叫,會造成可執行檔案體積恐怖的增大。

2. 檔案體積增大也會導致額外的換頁行為,降低了命中率。 

3. inline函式無法被除錯。

4. 被inline的函式無法隨著程式庫的升級而升級,如果inline函式需要被更新,那麼客戶的可執行檔案需要被重新編譯。

Get:

1. 編譯器拒絕inline virtual函式;

2. 一個空的構造和解構函式看似可以inline,實際其中會包含一些由編譯器產生的程式碼,所以構造和析構不是inline好的選擇;

3. 即使編譯器可以inline某個函式,但如果你在程式中呼叫了函式指標指向該函式,那麼這個函式也不會被inline,因為編譯器需要為該函式實現一個本體才能進行指標操作。

4. 記住80-20法則,選擇那些%20的程式碼去想辦法inline或者優化,而不是那%80,對那些程式碼優化那是徒勞的。