C++基础 | inline内联函数

前言

对于C++程序,需要预编译、编译、汇编、链接四个步骤才能成为可执行文件进而运行。而inline函数在编译期间执行。本文将结合上一节所说函数调用堆栈的开销,说明inline函数和普通函数的区别以及优点。

普通函数调用堆栈

int sum(int a,int b)
{
    return a+b;
}
int ret3=sum(a,b);

对于普通函数sum(a,b)的调用,会执行标准的函数调用过程:

1、参数压栈
2、开辟函数栈帧
3、执行完毕回退函数栈帧

inline函数调用

inline函数在调用时,会在编译期间将inline函数内的函数体代码展开到函数调用的位置,比如:

inline int sum(int a,int b)
{
    return a+b;
}

会在int ret3=sum(a,b)这个调用点将sum(a,b)展开成return (a,b)。这样就免去了sum(a,b)这个函数的调用开销。本身inline函数体直接展开,那么inline函数在程序的内存布局中就不会再生成这个函数的.text符号

总结

如果函数调用开销远远大于函数体的执行开销,那么就可以使用inline函数。但是尤其要注意inline函数在编译期间执行,如果一个函数必须要到运行期间才能执行,就不能使用inline。比如递归函数,其递归深度只有在运行期间才能确定,就不可以使用inline函数。而且inline函数内部如果逻辑代码较多,几十行代码,这样就没有必要。加上了inline,函数也不一定就会执行内联。编译器仅仅给函数加上建议执行内联,并不算是强制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值