C++ 内联函数(inline)

内联函数:就是在函数前加inline 让函数在调用的地方直接展开

可是内联函数有什么作用呢??

我们都知道,如果调用一个函数的话,会建立栈帧,在建立栈帧的时候会进行压栈等一系列操作。

而内联函数会在调用的地方展开,并不会建立栈帧。

下面我们来看一下

如果我们像调用这个函数的话,我们可以看一下它的汇编代码

我们可以看到,它的汇编里面是call了这个函数。call就是调用这个函数,如果一旦调用话就会建立栈帧 

上面是我们普通的函数,如果像让它成为内联函数,那么就在它前面加inline

这样外前面加inline就是内联函数了,那么我们来看一下它的汇编代码

 

我们可以看到,我们调用这个函数的时候是直接展开了,而并不是去call这个函数

那么所有的函数都可以成为内联函数吗??

我们可以想一下,内联函数是在调用的地方展开,如果代码量太大展开了会怎么样? 

我们可以想到的是,如果代码量太大,并且有很多地方调用了这个函数,那么在编译连接之后五一会增加代码量,会让编译好的汇编代码膨胀,导致可执行文件变大,这样就得不偿失了。

那么只有代码量太大不可以成为内联函数吗?

实际上我们的递归函数也不可以成为内联函数,还有就是声明和定义分离也不可以

下面给大家看一下

 

这样是代码量过多,我们就不能是内联函数了

 

而代码量多,怎么样才算多呢??

在vs下10行以上就不可以成为内联函数了

下面再看一下递归可不可以

 

实际上递归也是不可以的

还有就是声明和定义分离也不可以 

 

那么内联函数在什么情况下适合呢?

我们可以想一下,内联函数是在调用的地方展开,可以减少建立栈帧的开销,并且代码量不能太大,所以根据这个条件我们就可以想到,内联函数适应于,代码短小,并且频繁被调用的函数。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Naxx Crazy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值