通过反汇编理解GCC优化以及inline函数的功能

发布时间 2023-12-20 11:35:53作者: eques

在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)

因为涉及全局变量,f2的调用没法被优化成f2()*6

但inline函数,可以直接嵌入调用代码里,就可以被进一步优化