C++内联函数

内联函数的初步认识

被inline修饰的函数就是内联函数。

编译期间,内联函数会在调用该函数的地方直接展开,从而不用创建函数栈帧。这也就提升了程序的运行效率,但也会增加可执行程序的大小。

普通函数

image-20221020221055827

image-20221020221103021

这里调用了Add函数,会创建函数栈帧。

内联函数

image-20221020221112552

image-20221020221118838

从汇编中可以看到,这里并没有callAdd函数,而是直接对1和2相加,也就是直接展开了Add函数

内联函数的特性

  • inline是一种以空间换取时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,
    • 缺陷:可能会使目标文件变大
    • 少了调用开销,提高程序运行效率
  • inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器的实现)、不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。
  • inline不建议声明和定义分离,因为内联函数不进入符号表,如果声明定义分开,则在链接阶段是找不到定义的。
    • 截屏2022-10-20 21.46.30

内联函数与宏

内联函数的出现就是为了取代宏,

  • 宏的优点
    • 增强代码的复用性
    • 提高性能
  • 宏的缺点
    • 无法调试(在预处理阶段就进行了宏替换)
    • 无类型安全检查
    • 代码可读性差,可维护性差,容易误用

而内联函数的出现完美继承了宏的优点并且解决了宏的缺点。内联函数因为是函数,所以可以调试并且有类型安全检查,而正确的内联函数又会在调用处直接展开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云朵c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值