美文网首页
关于内联函数

关于内联函数

作者: wpf_register | 来源:发表于2020-06-08 11:13 被阅读0次
内联函数

又被称为在线函数或编译时期展开函数,是指在用inline修饰的函数(这里指的是C++或者C语言的函数)。

与普通函数的区别

函数不管是OC还是C/C++最终都需要编译成汇编指令,才能真正执行。
普通函数在被调用的时候需要CPU执行CALL指令不同(需要完成程序计数器压栈->执行要执行的函数语句->出栈程序计数器)。
内联函数不需要这个调用过程,内联函数在编译的时候,会直接在需要执行内联函数的地方(普通函数执行CALL的汇编语句处)将内联函数的汇编片段copy一份并插入到此处,代替CALL指令(类似于宏定义),而不需要普通函数的CALL指令调用过程。
因此内联函数的执行效率是比较高的,但是由于copy代码片段,需要内存消耗,所以内联函数是一种以空间换时间的方法

与宏定义的区别

宏定义只是简单的字符串替换,是不能做类型检查,内联函数相比而言就会更加安全

注意事项
  1. inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”
    关键字inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前面不起任何作用。如下风格的函数Foo不能成为内联函数:
inline void Foo(int x, int y);  // inline仅与函数声明放在一起 

  void Foo(int x, int y)  { 

} 

如下风格的函数Foo则成为内联函数:

void Foo(int x, int y);  
// inline与函数定义体放在一起
  inline void Foo(int x, int y)  { 

} 
  1. 内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。
    如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。
    每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。

以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大

相关文章

  • 关于内联函数

    内联函数 又被称为在线函数或编译时期展开函数,是指在用inline修饰的函数(这里指的是C++或者C语言的函数)。...

  • C++第二弹---函数

    内联函数 内联函数的定义内联函数也叫内嵌函数,他主要是解决程序运行效率。当内联函数收到编译器的指示时,即可发生内联...

  • Python沙盒逃逸Payload收集(搬运自王一航师傅)

    1.内联函数 关于内联函数,我的理解就是省去函数调用时函数返回地址、参数的压入栈的开销,而采用类似宏定义的代码展开...

  • 内联函数

    内联函数 整理自内联函数百度百科 内联函数是指用inline修饰的函数(并不是所有用inline修饰的函数都是内联...

  • 《C++ Primer Plus》:函数探幽

    本章内容概览 内联函数 引用变量 按引用传递函数参数 默认参数 函数重载 函数模板 内联函数 内联函数是C++为提...

  • Kotlin系列之let、with、run、apply、also

    目录: 一、回调函数的Kotin的lambda的简化二、内联扩展函数之let三、内联函数之with四、内联扩展函数...

  • C++基础-(函数)

    C++基础 函数 内联函数 内联函数非常短的函数适合于内联函数体会到插入到发生函数调用的地方普通函数调用多次也只有...

  • C++——内联函数、函数重载、函数缺省参数

    内联函数 使用inline关键字将函数变为内联函数,函数内联是为了降低函数调用时占用的多余时间,多余时间的产生在,...

  • C++——内联函数、函数重载、函数缺省参数

    内联函数 使用inline关键字将函数变为内联函数,函数内联是为了降低函数调用时占用的多余时间,多余时间的产生在,...

  • 内联函数

    内联函数 在类中定义的函数,但是实现却在类外面。并且在函数前加了 inline 就是内联函数,内联函数效率一般比较...

网友评论

      本文标题:关于内联函数

      本文链接:https://www.haomeiwen.com/subject/izlltktx.html