在linux環境寫下以下C代碼:
首先不加優化選項去編譯:gcc -g inline_func_test.c -o inline_func_test
之後用objdump -S反彙編
可見:
可見,即使f1是inline函數,還是和f2一樣被調用了六次。
之後加入優化選項去編譯
gcc -O1 -g inline_func_test.c -o inline_func_test
這一次,f2依然被調用六次
inline函數f1卻被優化了
t=f1()+f1()+f1()+f1()+f1()+f1();這句被編譯爲addl $0x6,0x200b27(%rip)
這個0x200b27(%rip)就是全局變量counter,直接被加6,也沒有給局部變量賦值,因爲後面t又被賦0
因爲涉及全局變量,f2的調用沒法被優化成f2()*6
但inline函數,可以直接嵌入調用代碼裏,就可以被化