清楚利弊,用好內聯

2021-09-20 02:45:18 字數 674 閱讀 3159

在類宣告中定義方法;

內聯方法放在類宣告之外,但必須出現在標頭檔案中,且內聯方法宣告中使用inline標識;

注:inline只是對編譯器的建議,是否內聯的決定權在編譯器;

函式呼叫開銷

呼叫間優化 優秀的編譯器可是內聯方法的邊界難以區分(將**內聯後,對**進行重新排列)

**膨脹(空間開銷)

由於**膨脹帶來的頁面快取命中率下降

編譯時間增加

修改檔案後相關檔案都需要重新編譯;

由於函式邊界模糊,該內聯函式遇到問題後不好排查;

優化時,只針對高頻**內聯;

對於呼叫頻率高的(80%以上場景都會走到的路徑):

函式規模<5行:總是內聯;

5-20行,將高頻率的呼叫點選擇性內聯;

超過20行,重寫方法,體現出快速路徑並將其內聯;

將內聯工作放到開發周期後期

使用條件內聯,通過巨集和編譯選項的技巧控制在開發初期不內聯,而到開發後期再加上自定義內聯選項進行內聯;

sparc中有充足的暫存器,在限定的呼叫深度範圍內幾乎沒有呼叫返回的效能損失(無須在呼叫時儲存就的暫存器內容),所有,這種體系結構的內聯效果甚微,一般不用考慮內聯;

posted by: 大cc | 29jun,2015

部落格:blog.me115.com [訂閱]

github:大cc

清楚利弊,用好內聯

在類宣告中定義方法 內聯方法放在類宣告之外,但必須出現在標頭檔案中,且內聯方法宣告中使用inline標識 注 inline只是對編譯器的建議,是否內聯的決定權在編譯器 函式呼叫開銷 呼叫間優化 優秀的編譯器可是內聯方法的邊界難以區分 將 內聯後,對 進行重新排列 膨脹 空間開銷 由於 膨脹帶來的頁面...