概述
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ù)不會出錯。