【反彙編4】通過反彙編理解GCC優化以及inline函數的功能

在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函數,可以直接嵌入調用代碼裏,就可以被化

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章