inline内联函数

来源:互联网 发布:遗传算法理解 编辑:程序博客网 时间:2024/05/22 06:20

一、内联函数 :内联函数是指用inline关键字修饰的函数
它与普通函数所不同之处只在于函数调用的处理。普通函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;内联函数不是在调用时发生执行权转移,而是在编译时将“函数体”嵌入在每一个调用处编译时类似宏替换,使用函数体替换调用处的函数名。调用几次就替换几次,这样省去了函数调用时的一些额外开销,比如保存和恢复函数返回地址等,可以加快速度。不过调用次数多的话,会使可执行文件变大,这样会降低速度。

二、static inline :使用的inline函数大多被定义为static 类型。
static inline的内联函数,一般情况下不会产生函数本身的代码,而是全部被嵌入在被调用的地方。如果不加static,则表示该函数有可能会被其他编译单元所调用,所以一定会产生函数本身的代码。所以加了static,一般可令可执行文件变小。一般很少只用inline的情况,都是使用static inline。

三、在使用内联函数时,应注意如下几点:

  1. 内联函数是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现
  2. 在内联函数内不允许用循环语句和开关语句。如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数(自己调用自己的函数)是不能被用来做内联函数的。
  3. 内联函数的定义必须出现在内联函数第一次被调用之前

0 0