在類宣告中定義方法;
內聯方法放在類宣告之外,但必須出現在標頭檔案中,且內聯方法宣告中使用inline標識;
注:inline只是對編譯器的建議,是否內聯的決定權在編譯器;
函式呼叫開銷
呼叫間優化 優秀的編譯器可是內聯方法的邊界難以區分(將**內聯後,對**進行重新排列)
**膨脹(空間開銷)
由於**膨脹帶來的頁面快取命中率下降
編譯時間增加
修改檔案後相關檔案都需要重新編譯;
由於函式邊界模糊,該內聯函式遇到問題後不好排查;
優化時,只針對高頻**內聯;
對於呼叫頻率高的(80%以上場景都會走到的路徑):
函式規模<5行:總是內聯;
5-20行,將高頻率的呼叫點選擇性內聯;
超過20行,重寫方法,體現出快速路徑並將其內聯;
將內聯工作放到開發周期後期
使用條件內聯,通過巨集和編譯選項的技巧控制在開發初期不內聯,而到開發後期再加上自定義內聯選項進行內聯;
sparc中有充足的暫存器,在限定的呼叫深度範圍內幾乎沒有呼叫返回的效能損失(無須在呼叫時儲存就的暫存器內容),所有,這種體系結構的內聯效果甚微,一般不用考慮內聯;
posted by: 大cc | 29jun,2015
部落格:blog.me115.com [訂閱]
github:大cc
清楚利弊,用好內聯
在類宣告中定義方法 內聯方法放在類宣告之外,但必須出現在標頭檔案中,且內聯方法宣告中使用inline標識 注 inline只是對編譯器的建議,是否內聯的決定權在編譯器 函式呼叫開銷 呼叫間優化 優秀的編譯器可是內聯方法的邊界難以區分 將 內聯後,對 進行重新排列 膨脹 空間開銷 由於 膨脹帶來的頁面...