美文网首页
Tips:inline 与force_inline

Tips:inline 与force_inline

作者: dc630f46ee2d | 来源:发表于2017-10-31 08:36 被阅读0次

    前期准备 函数入栈和出栈

    函数每次入栈都会调用call指令,调用后还需要出栈返回到原来调用的地方。这个时间开销实际是比较大的。

    247487dfbaf1ec956441e9e5e2f85817_hd.jpg

    inline

    inline在函数调用的地方展开,减少了调用的时候函数入栈出栈的开销,也就是说一个普通函数调用内联函数,内联函数不会进行出入栈的操作。这个只是一个提示关键字。

    编译器会自己决定是否采用内联的方式来展开标记为内联的函数。一旦编译器决定使用内联,那么在编译阶段编译成函数调用而是直接扩展到调用函数体内,最终会导致不需要在在调用的时候将这个函数入栈和出栈,但会造成内存增加(因为每个调用内联的方法都会展开这个内联函数)。这个是一个典型的以空间换时间的方法。

    force_inline

    #define force_inline __inline __attribute__((always_inline))
    force_inline替换为 __inline __attribute__((always_inline)),后者表示强制内联。

    inline或者说force_inline的使用场景

    1.内联函数内不允许用循环语句和开关语句。
    2.由于使用内联函数会增加内存,只适合代码短的函数
    3.有些函数使用内联关键字后,依然担心编译器不把它当作内联函数,可以使用强制内联
    4.内联的作用和带参数的宏类似,不过多了类型检查,是很多场合下可以代替带参数的宏。

    相关文章

      网友评论

          本文标题:Tips:inline 与force_inline

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