内联函数(C++)

内联函数

概念

inline关键字修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销,内联函数提升了程序运行的效率。

通过上述图片,我们看出在运行上述代码时,调用Add函数是有建立栈帧的开销的。当我们用inline修饰函数后,可以观察到如下图所示:

通过对上面两张图片的对比,我们可以看出加上inline后,没有了函数栈帧的开销,它会直接在调用内联函数的地方展开运行。

特性

  1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,直接在调用内联函数的地方展开,这样做虽然减少了调用的开销,提高了程序运行效率,但可能会使目标文件变大
  2. inline对于编译器来说只是一个建议,意思是你采用了inline关键字,但编译器实不实现是编译器决定的,你只是给编译器发出了一个请求。不同的编译器对于inline的实现机制可能不同,一般建议:函数体的规模较小、不是递归、且频繁调用的函数用inline修饰。
  3. inline不建议声明和定义分离,分离会导致链接错误。因为inline没有栈帧的开销,就没有函数地址,只会找到声明,但找不到定义。因此inline最好是声明和链接在一起。

当我们运行上述代码时,我们可以看出,尽管我们用inline修饰了函数,但是由于函数规模较大,编译器仍然数建立了栈帧,没有形成内联。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值