内联函数inline

      在C语言中,使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,在C++中,使用内联函数这种借助编译器的优化技术来减少程序的执行时间。
        1、内联函数
        
在返回值类型前面加上inline关键字的函数称为内联函数,所有类中定义的函数都默认声明为内联函数,虚函数不允许使用内联,内联函数在编译阶段发生,当编译器处理调用内联函数的语句时,不会将该语句编译成函数指令,而是将整个函数体的代码写入调用点,就像整个函数体在调用点被重写了一边一样,这是典型的以空间换时间,即增加空间消耗来节省时间,内联函数不生成符号。
        内联的优点:
        1. 内联函数在编译阶段处理,在调用点直接将代码展开,相比于普通函数没有开栈和清栈的开销,运行效率高。
        2. 编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确,然后进行一系列的相关检查,就像对待任何一个真正的函数一样,这样就消除了它的安全隐患和局限性。
        内联的缺点:
        1. 内联函数在调用点直接将代码展开,以代码膨胀为代价,典型的以空间换时间。
        2. 内联函数具有一定的局限性,内联函数的函数体一般来说不能太大,如果内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。(换句话说就是,使用内联函数,只不过是向编译器提出一个申请,编译器可以拒绝你的申请)这样,内联函数就和普通函数执行效率一样了。
        2、inline与static的区别
        inline和static修饰的函数,函数符号的属性是一个local属性,即在本文件可见,内联函数没有开栈和清栈的开销,static修饰的函数有开栈和清栈的开销。
        3、内联与宏的区别:
        内联在编译阶段发生,会进行类型检查、安全检查,宏在预编译阶段发生,进行文本替换,没有所谓的类型和安全性检查,宏的安全性低(用到参数时应将参数用括号括起来,否则会产生错误),可认为内联是一种更安全的宏。
        4、内联的注意事项
        1、内联的实现一般写在头文件.h中。
        2、内联只在release版本生效。
        3、内联函数不包括复杂的控制语句,如循环语句、switch语句和递归,例如只有一个包含一两条语句的循环,但该循环的执行次数可能会很多,要消耗大量时间,那么这种情况就不适合将其实现为内联函数。|
        4、内联函数中的代码应该只是很简单、执行很快的几条语句。如果一个函数较为复杂,它执行的时间可能上万倍于函数调用的额外开销,那么将其作为内联函数处理的结果是付出让代码体积增加不少的代价,却只使速度提高了万分之一,这显然是不划算的。
        5、内联只是给编译器的一个建议,处不处理,由编译器根据上下文决定。
        6、内联是基于实现的,而不是声明的,inline写在声明处无效。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值