【反汇编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函数,可以直接嵌入调用代码里,就可以被化

 

posted @ 2023-12-20 13:23  J·Marcus  阅读(12)  评论(0编辑  收藏  举报