inline内联函数的意义
程序员文章站
2022-03-01 19:47:09
...
使用inline声明函数,表示建议编译器在编译时内联展开。
何为内联展开?类似宏一样,直接将函数在调用的位置展开。
1)inline声明后编译器一定会内联展开吗?不一定
编译器会根据实际情况,如函数体大小,是否有循环、递归,函数调用是否频繁来决定。
gcc编译器一般不会对内联函数展开,只有在
优化级别开到-O2
时,或设置属性强制展开
;
2)内联函数的意义
如果一个函数很短,无循环、递归等复杂操作,且该函数经常被调用(指运行的次数多,而非调用的地址多);
那么为了减少调用的开销(保存、恢复现场),将函数声明为内联函数,可以让编译器在编译阶段将其在调用位置进行展开。
3)宏 & 内联函数
- 宏在预处理阶段展开,内联在编译阶段展开
- 内联函数是函数,具有参数和返回值检查,使用起来没有隐患
4)实例
#include <stdio.h>
static inline int increase(int a) {
//static inline __attribute__((always_inline)) int increase(int a) {
return a+1;
}
int main(int argc, char const* argv[])
{
int t = increase(4);
printf("t = %d\n", t);
return 0;
}
测试:使用反汇编,查看是否进行内联展开,objdump -D a.out
① gcc编译器一般不会对内联函数展开
② 设置函数属性__attribute__((always_inline))
,强制内联展开
③ 优化级别开到-O2以上(请自行测试)
上一篇: inline内联函数的使用
下一篇: Oracle数据库文档导出表结构及备注