一、前言
程序经过编译最终生成可执行代码:一组机器语言指令。运行程序时,操作系统将这些指令加载到内存中,每条指令都有特定的内存地址,计算机将逐步执行这些指令。(当然,会涉及到指令的跳转,这里和主题无关,略过)
在执行到调用函数的指令时,程序会存储这条调用指令的地址,接着将函数的参数复制到堆栈,跳到标记函数起点的内存单元,执行函数代码(将返回值放入寄存器),然后跳回到调用指令的地址,继续往下执行。
二、内联函数
编译器使用相应的函数代码替换函数调用,这样程序无需跳转到另一个位置执行代码,节省了时间。
节省了时间,代价是需要占用更多内存,在多个地方调用这个函数,程序将包含多个函数代码的副本。
三、用法
在函数声明前加上inline
在函数定义前加上inline
通常做法是省略原型,将整个函数名和函数体放在本应提供原型的地方。
#include<iostream>
inline int test(int a)
{
return a;
}
int main()
{
//代码
}
四、使用场景
1、执行函数代码的时间比调用的时间长,则节省的时间占比较小
2、执行函数的之间很短,则节省时间的占比较大
3、函数经常被调用时,也可以节省较多时间
五、使用
内联函数要求在每个使用它们的文件中都对其进行定义
关键字inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前面不起任何作用。