本站开发的软件简介及下载地址
您现在的位置:首页 >> 电脑知识 >> 软件编程 >> 内容

c语言inline函数使用

时间:2012/1/11 19:40:12 点击:

   书上学过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也很少用到inline来定义函数,近几天在研读google的google c++ style guide,发现之前自己对inline函数的认识太过肤浅了,这里学习总结一下。

    1、inline函数不要超过10行代码,且不能包含循环、switch、if语句

    2、在一个c文件中定义的inline函数是不能在其它c文件中直接使用,google推荐把inline函数定义在**-inl.h头文件中。

    3、不要过度使用inline函数定义,尤其对大函数来说

    上三点说明如何正确的使用inline函数,我以前的时候对inline理解不透彻,使用inline的方式不正确,但现在编译器够先进,能保证错误的inline定义也可以正确编译、运行。可能会有性能的缺失。

    有人在F14(gcc 版本 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC))上做了个实验:

    1、当inline函数超过10行,并且包含了循环、switch语句后gcc会执行inline语义,将inline函数汇编嵌入到main函数中。

    //gcc n.c -O2 -S

    #include <stdio.h>

    #include <string.h>

    //inline int inc_inline(volatile int *j);

    inline int inc_inline(volatile int *j)

    {

    for (;*j < 100; (*j)++)

    {

    *j += 2;

    (*j)++;

    }

    switch (*j)

    {

    case 1:

    (*j)++;

    break;

    case 2:

    (*j)++;

    break;

    default:

    break;

    }

    return (*j)++;

    }

    int main(int argc, char *argv[])

    {

    volatile int i = 0;

    inc_inline(&i);

    printf("i;%d\n", i);

    return 0;

    }

    2、当把inline函数的定义放到另一个c文件中,在main函数文件中声明此函数,此时inline函数不生效,gcc编译出的汇编使用call进行正常的函数调用。

    //gcc n.c a.c -O2 -S

    3、当过度使用inline函数,会造成程序文件变大,性能降低。程序文件变大是肯定的,但为什么性能会降低呢,inline不是为了提高性能吗?使用的方式不正确性能不能提高,反而会下降。现在的CPU上都有cache,紧凑的代码在chache中保存的时间更长,这样cache命中的机会更高。

    如果某个A函数未定义为inline,并且被很多其它函数调用,那个这个A函数很大的可能会长期被保存在cahe中,这样CPU对代码的执行速度会提高很多。如果A函数被定义为了inline函数,代码分散各个调用函数中,这样每次指定都不命中都需要去内存把代码拷贝到cache中,然后执行,造成很大的抖动。

 

 
分享到:
  • 算命,择日,风水(www.itmao.com) © 2018 版权所有 All Rights Reserved.
  • 站长电话:13559403980;站长QQ:305671986;点击这里给我发消息站长Email:chwc228@163.com 或 chwc88@qq.com; 闽ICP备05011419号