内联函数

来源:互联网 发布:免费流量控制软件 编辑:程序博客网 时间:2024/06/07 01:04

内联函数:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置(比如说下面的实例程序,在main函数中,调用到foo这个函数时,会将代码展开为a+b插入到主函数中)。这样做的好处是省去了调用的过程,加快程序运行速度。

int  foo(int a,int b){    return a+b;}

在正常的编译过程中,调用到一个函数时,需要将其调用的参数入栈,寄存器变量入栈,ebp入栈,重新为esp分配空间等操作,这无疑增加时间,但是在调用到内联函数时,它直接将函数中的代码插入到该空间位置,省去了调用函数时所必须的一堆操作过程。这种做法增大了主函数的空间,以空间换时间。
另外,内联函数在编译过程中不会生成符号,所以内联函数的定义和声明不能分开写在两个cpp文件中,否则,在链接的过程中会发生错误。

总结:
1.内联函数在debug模式(调试模式)下是不起作用的,只在relase模式下有用。
2.内联函数不产生符号,在链接时,无法找到引用定义,若将内联函数定义和声明分文件写,找不到内联函数的定义,会导致链接出错。
3.内联函数是给编译器提出的建议,并不一定会被采用。如果该函数为递归函数,或函数中有条件语句,循环语句,即使有inline标识,编译器也不会将该函数当成内联函数来处理。
4.内联函数最好比较短小,语句简单。
5.内联函数是在编译阶段在调用处将调用函数的代码展开。