内联函数

内联函数:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置(比如说下面的实例程序,在main函数中,调用到foo这个函数时,会将代码展开为a+b插入到主函数中)。这样做的好处是省去了调用的过程,加快程序运行速度。

int  foo(int a,int b)
{
    return a+b;
}

在正常的编译过程中,调用到一个函数时,需要将其调用的参数入栈,寄存器变量入栈,ebp入栈,重新为esp分配空间等操作,这无疑增加时间,但是在调用到内联函数时,它直接将函数中的代码插入到该空间位置,省去了调用函数时所必须的一堆操作过程。这种做法增大了主函数的空间,以空间换时间。
另外,内联函数在编译过程中不会生成符号,所以内联函数的定义和声明不能分开写在两个cpp文件中,否则,在链接的过程中会发生错误。

总结:
1.内联函数在debug模式(调试模式)下是不起作用的,只在relase模式下有用。
2.内联函数不产生符号,在链接时,无法找到引用定义,若将内联函数定义和声明分文件写,找不到内联函数的定义,会导致链接出错。
3.内联函数是给编译器提出的建议,并不一定会被采用。如果该函数为递归函数,或函数中有条件语句,循环语句,即使有inline标识,编译器也不会将该函数当成内联函数来处理。
4.内联函数最好比较短小,语句简单。
5.内联函数是在编译阶段在调用处将调用函数的代码展开。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值