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