文章目录
内联函数
1、普通函数调用时是生成调用指令(跳转),然后当代码执行到调用位置时跳转到函数所在的代码段中执行。
2、内联函数就是把函数编译好的二进制指令直接复制到函数的调用位置
3、内联函数的优点就是提高程序的运行速度(因为没有跳转,也不需要返回),但这样会导致可执行文件增大(冗余),也就是牺牲空间来换取时间。
4、内联有显式内联和隐式内联
显式内联:在函数前 inline(C语言C99标准也支持)。
隐式内联:结构、类中内部直接定义的成员函数,则该类型函数会被优化成内联函数。
5、宏函数在调用时会把函数体直接替换到调用位置,与内联函数一样也是使用空间来换取时间,所以宏函数与内联的区别(优缺点)?
1、宏函数不是真正的函数,只是代码替换,不会有参数压栈,出栈以及返回值,也不会检查参数类型,因此所有类型都可以使用,但这样会有安全隐患。
2、内联函数是真正的函数,函数调用时会进行传参,会进行压栈、出栈,可以有返回值,严格检查参数类型。但是这样就不能通用,如果想被多种类型调用,需要重载。
6、内联适用的条件:
由于内联会造成可执行文件变大,并且会增加内存开销,因此只有频繁调用的简单函数适合作为内联函数。
调用比较少的复杂函数,内联后并不显著提高性能,不足以抵销牺牲空间带来的损失,所以不适合内联
带有递归特性和动态绑定特性的函数,无法实施内联,因此编译器会忽略声明部分的inline关键字。