inline函數(shù)不入棧的利弊

概述

inline函數(shù)在實際運行時可能被編譯器認為過于復(fù)雜,所以當(dāng)作普通函數(shù)來使用。

這里要討論的是,當(dāng)它被當(dāng)成inline函數(shù)時會發(fā)生啥。

  • 好處:inline函數(shù)不入棧,加快運行速度
    函數(shù)在不斷調(diào)用的過程,程序計數(shù)器PC(Program Counter)會跳來跳去,速度會受影響。因為每次調(diào)用函數(shù),都要把返回地址新的函數(shù)壓入棧中,PC跳轉(zhuǎn)到新函數(shù),新函數(shù)結(jié)束,PC再跳到剛被pop出來的返回地址上。

    inline函數(shù)相當(dāng)于直接附在了調(diào)用它的函數(shù)上面,避免了這個跳轉(zhuǎn)過程。

  • 壞處:無法打補丁,只能手動調(diào)整
    如果inline函數(shù)出現(xiàn)了問題,那么我們有些時候時不能夠在原函數(shù)去改變函數(shù)功能(我也不知道為啥,大佬說的肯定沒錯就是了),只能通過打補丁的方式,去改變這個函數(shù)的行為,比如直接跳轉(zhuǎn)到補丁那里,運行那邊的內(nèi)容。最關(guān)鍵的是,你需要在這個函數(shù)被壓棧之后再打補丁,這個補丁可以通過改變匯編代碼,跳轉(zhuǎn)的不同的地方。

    這種情況下,上面的優(yōu)勢就變成劣勢了,inline函數(shù)不入棧,所以你沒法打補丁,只能在所有調(diào)用它的函數(shù)那去修改,工作非常繁瑣

結(jié)論

inline函數(shù)功能必須單一,如果要使用,一定保證這個函數(shù)不會出錯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容