淺談VC++中的內聯(lián)
內聯(lián)的語法
在類聲明中定義方法;
內聯(lián)方法放在類聲明之外,但必須出現(xiàn)在頭文件中,且內聯(lián)方法聲明中使用inline標識;
注:inline只是對編譯器的建議,是否內聯(lián)的決定權在編譯器;
內聯(lián)節(jié)省的開銷
函數(shù)調用開銷
調用間優(yōu)化 優(yōu)秀的編譯器可是內聯(lián)方法的邊界難以區(qū)分(將代碼內聯(lián)后,對代碼進行重新排列)
內聯(lián)帶來的問題
代碼膨脹(空間開銷)
由于代碼膨脹帶來的頁面緩存命中率下降
編譯時間增加
修改文件后相關文件都需要重新編譯;
由于函數(shù)邊界模糊,該內聯(lián)函數(shù)遇到問題后不好排查;
內聯(lián)函數(shù)的建議
優(yōu)化時,只針對高頻代碼內聯(lián);
對于調用頻率高的(80%以上場景都會走到的路徑):
函數(shù)規(guī)模<5行:總是內聯(lián);
5-20行,將高頻率的調用點選擇性內聯(lián);
超過20行,重寫方法,體現(xiàn)出快速路徑并將其內聯(lián);
內聯(lián)的技巧
將內聯(lián)工作放到開發(fā)周期后期
使用條件內聯(lián),通過宏和編譯選項的技巧控制在開發(fā)初期不內聯(lián),而到開發(fā)后期再加上自定義內聯(lián)選項進行內聯(lián);
SPARC體系結構中的內聯(lián)
SPARC中有充足的寄存器,在限定的調用深度范圍內幾乎沒有調用返回的性能損失(無須在調用時存儲就的寄存器內容),所有,這種體系結構的內聯(lián)效果甚微,一般不用考慮內聯(lián);
以上所述就是本文的全部內容了,希望大家能夠喜歡。
相關文章
VSCode與Keil聯(lián)合開發(fā)STM32的流程
這篇文章主要介紹了VSCode與Keil聯(lián)合開發(fā)STM32的流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02C/C++?Qt數(shù)據(jù)庫與SqlTableModel組件應用教程
SqlTableModel?組件可以將數(shù)據(jù)庫中的特定字段動態(tài)顯示在TableView表格組件中,這篇文章將主要介紹SqlTableModel組件一些常用的操作,需要的朋友可以參考一下2021-12-12