zoukankan      html  css  js  c++  java
  • 学点 C 语言(39): 函数 使用函数的代价与内联函数(inline)


    C 语言离不开函数, 使用函数也很方便, 但使用函数是有代价的;
    特别是在反复调用时, 函数会因反复地压栈、出栈而浪费一些时间.

    下面是测试, 用函数与不用函数的时间分别是: 8秒、4秒!

    1. 测试使用函数的代价:
    #include <stdio.h>
    #include <time.h>
    
    int sum(int x) {
        return x + x;
    }
    
    int main(void)
    {
        int count = 1000000000;
        int i;
        int num;
        
        time_t start, stop;
    
        time(&start);
        for (i = 0; i < count; i++) num = sum(i); 
        time(&stop);
        printf("调函数用时: %d 秒;\n", stop - start);  /* 8 */
        
        time(&start);
        for (i = 0; i < count; i++) num = i + i;    
        time(&stop);
        printf("非函数用时: %d 秒;\n", stop - start);  /* 4 */
        
        getchar();
        return 0;
    }
    

    2. 使用内联函数:

    在函数头上冠上 inline 关键字就是内联函数了.

    使用内联函数可以让函数得到优化, 所谓优化就是把函数嵌入到当前位置.

    一般只可以考虑把较小的函数使用内联, 因为这只是个申请, 编译器不保证对所有的申请执行内联.

    内联函数只能使用在被定义(而不是被声明)的单元.

    下面继续使用了上面的例子(只添加了一个 inline) 测试.

    测试了几次, 基本还是上面的测试结果; 看来 C++Builder 2009 并没有理会它.
    #include <stdio.h>
    
    
    inline int sum(int x) {
        return x + x;
    }
    
    int main(void)
    {
        int count = 1000000000;
        int i;
        int num;
        
        time_t start, stop;
    
        time(&start);
        for (i = 0; i < count; i++) num = sum(i); 
        time(&stop);
        printf("调函数用时: %d 秒;\n", stop - start);
        
        time(&start);
        for (i = 0; i < count; i++) num = i + i;    
        time(&stop);
        printf("非函数用时: %d 秒;\n", stop - start);
        
        getchar();
        return 0;
    }
    

  • 相关阅读:
    How Does Batch Normalization Help Optimization?【阅读笔记】
    连接局域网内其他机器虚拟机中的Linux服务器
    阿里云磁盘扩容
    apscheduler模块
    linux挖矿病毒
    jenkins-时间参数
    k8s-学习笔记11-容器探针
    k8s-学习笔记10-watch机制
    xfce4设置屏保/锁屏时间
    高清动图方案
  • 原文地址:https://www.cnblogs.com/del/p/1347882.html
Copyright © 2011-2022 走看看