美文网首页
05-内联函数

05-内联函数

作者: _东阁堂主_ | 来源:发表于2019-02-06 09:52 被阅读0次

    写在前面

    接下来又要学一个关键字了--inline
    使用inline修饰函数的声明或者实现,可以使其变成内联函数
    建议声明和实现都增加inline修饰
    

    名词解释

    特点:
    编译器会将函数调用直接展开为函数体代码 
    可以减少函数调用的开销 
    会增大代码体积
    内联函数和普通函数的区别在于:当编译器处理调用内联函数的语句时,
    不会将该语句编译成函数调用的指令,而是直接将整个函数体的代码插人调用语句处,(这尼玛又逼着我学汇编,还好大学时学过😏)
    就像整个函数体在调用处被重写了一遍一样
    

    码上封口

    将main.m 改为mian.mm 文件
    #include <iostream>
    using namespace std;
    
    //声明内联函数
    inline int sum(int a, int b);
    
    int main() {
        
        cout << "sum的和是:"<< sum(10, 20) << endl;
    }
    
    //内联函数的实现
    inline int sum(int a, int b) {
        return a + b;
    }
    

    码来补充

    ◼ 内联函数和宏,都可以减少函数调用的开销 
    ◼ 对比宏,内联函数多了语法检测和函数特性
    ◼ 思考以下代码的区别 #define sum(x) (x + x)
    inline int sum(int x) { return x + x; } 
    int a = 10; sum(a++);
    

    装逼一下

    函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,
    接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,
    最后才跳转到函数内部执行。这个过程是要耗费时间的。
    
    另外,函数执行 return 语句返回时,需要从栈中回收形参和局部变量占用的存储空间
    ,然后从栈中取出返回地址,再跳转到该地址继续执行,这个过程也要耗费时间。
    
    
    一般情况下,这个开销可以忽略不计。但是,如果一个函数内部没有几条语句,执行时间本来就非常短,
    那么这个函数调用产生的额外开销和函数本身执行的时间相比,就显得不能忽略了。假如这样的函数在一个循环中被上千万次地执行,
    函数调用导致的时间开销可能就会使得程序运行明显变慢。
    
    作为特别注重程序执行效率,适合编写底层系统软件的高级程序设计语言
    ,C++ 用 inline 关键字较好地解决了函数调用开销的问题。
    

    完整代码demo,请移步GitHub:DDGLearningCpp

    当然C++大神就绕吧,非喜勿喷,毕竟这是个人的学习笔记📒

    相关文章

      网友评论

          本文标题:05-内联函数

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