清楚利弊,用好內聯

清楚利弊,用好內聯

內聯的語法

  1. 在類聲明中定義方法;
  2. 內聯方法放在類聲明以外,但必須出如今頭文件中,且內聯方法聲明中使用inline標識;

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

內聯節省的開銷

  1. 函數調用開銷
  2. 調用間優化 優秀的編譯器但是內聯方法的邊界難以區分(將代碼內聯後,對代碼進行從新排列)

內聯帶來的問題

  1. 代碼膨脹(空間開銷)
  2. 因爲代碼膨脹帶來的頁面緩存命中率降低
  3. 編譯時間增長
  4. 修改文件後相關文件都須要從新編譯;
  5. 因爲函數邊界模糊,該內聯函數遇到問題後很差排查;

內聯函數的建議

優化時,只針對高頻代碼內聯;
對於調用頻率高的(80%以上場景都會走到的路徑):
函數規模<5行:老是內聯;
5-20行,將高頻率的調用點選擇性內聯;
超過20行,重寫方法,體現出快速路徑並將其內聯;github

內聯的技巧

  1. 將內聯工做放到開發週期後期
  2. 使用條件內聯,經過宏和編譯選項的技巧控制在開發初期不內聯,而到開發後期再加上自定義內聯選項進行內聯;

SPARC體系結構中的內聯

SPARC中有充足的寄存器,在限定的調用深度範圍內幾乎沒有調用返回的性能損失(無須在調用時存儲就的寄存器內容),全部,這種體系結構的內聯效果甚微,通常不用考慮內聯;緩存

推薦支持

若是你以爲本文對你有所幫助,請點擊如下【推薦】按鈕, 讓更多人閱讀;函數

Posted by: 大CC | 29JUN,2015
博客:blog.me115.com [訂閱]
Github:大CC性能

相關文章
相關標籤/搜索