iOS行內函數小記
阿新 • • 發佈:2019-01-29
前言:
對比兩者的mian.m的彙編程式碼,可以發現,沒有使用`static inline修飾的行內函數的mian函式彙編程式碼中,會出現 call 指令!這就是區別!呼叫call指令就是就需要:
-(1)將下一條指令的所在地址(即當時程式計數器PC的內容)入棧
-(2)並將子程式的起始地址送入PC(於是CPU的下一條指令就會轉去執行子程式)
結論:
1.使用inline修飾的函式,在編譯的時候,會把程式碼直接嵌入呼叫程式碼中。就相當於用#define 巨集定義來定義一個add 函式那樣!與#define的區別是:
1)#define定義的格式要有要求,而使用inline則就行平常寫函式那樣,只要加上`inline即可!
2)使用#define巨集定義的程式碼,編譯器不會對其進行引數有效性檢查,僅僅只是對符號表進行替換。
3)#define巨集定義的程式碼,其返回值不能被強制轉換成可轉換的適合的轉換型別。可參考百度文科 關於inline