C++回忆录:(二)inline内联函数

在C/C++语言中,函数调用会涉及到函数的入栈和出栈,比如下面的例子:

Void myprint()

{

Printf("%d",3);

}

Void main()

{

Int i;

For(i=0;i<100;i++)

Myprint(2);

}

在主函数中调用myprint函数打字2这个数字,我们就要调用函数100次,意味着这个函数要进栈100次,出栈100次,这样我们就打印一个小小的2就要把时间花费在进栈和出栈上了,当我们把程序改为如下所示时:

Void main()
{
    Int i;
    For(i=0;i<100;i++)
    Void myprint()
    {
    Printf("%d",3);
    }
}
此时相当于
static inline void myprint(int n);
static inline void myprint(int n)
{
    printf("%d",n);
}
void main()
{
  int i;
  for(i=0;i<100;i++)
    myprint(3);

}
此时,我们就不需要进栈出栈了,直接打印2就可以了。

当然无论任何事,得到了一定的方便之后就必须得付出一定的代价,即此时的空间的问题。打个比方,现在我们要去一个超市买东西,而超市距离我们家有好几里路,此时你要话费一定的时间在去超市的路上,可是现在呢超市已经搬到家里了,我们就没有必要去超市了,因为超市已经在家里了,当然你的家有那么大?能容得下一个超市?所以此时就存在一个空间的问题,即你必须扩大你家,才能够容纳的下一个超市。

对于内存来说也是一样的,减少了对栈的进出时间的开销,我们却扩大了主存的空间来容纳本来在栈里的函数,在C语言中实现这一功能是用内联函数inline来实现的。

这就是inline函数的作用!

实际上,即使没有手工指定inline函数,编译器一般还会选择一些代码量较小但使用频繁的函数作为inline函数,以此作为性能优化的途径之一。

与带参宏定义相比,inline函数具备以下优点:

  • 参数类型检查:宏定义中所使用的参数仅仅是在宏定义中被替换,不进行任何的类型检查
  • 返回值:宏定义中无法使用return返回
  • 便于调试


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值