芝士wa
2024.4.9
原理
内联函数是C++的增强特性之一,用来降低程序的运行时间。
作用机理:把内联函数的函数体在编译器预处理的时候替换到函数调用处(副本),这样代码运行到这里的时候就不需要花时间去调用函数(减少了函数调用过程的入栈出栈开销)。
此外,内联函数仅仅是对编译器的内联建议,编译器是否采纳取决于函数本身,如果函数体非常大,那么编译器将忽略函数的内联声明,而将内联函数作为普通函数处理。
利与弊
-
优点
-
避免了函数调用所带来的保存现场,入栈出栈、存储函数返回值等开销,提高了程序的运行速度
-
inline函数的定义和声明应该一起写在头文件中,以便编译器查找替换
-
缺点
-
由于代码的替换扩展,内联函数会增大可执行程序的体积,反而导致程序变慢
-
C++内联函数的展开是中编译阶段,如果内联函数发生了改动,就需要重新编译代码
什么时候可以使用内联?
- 对程序执行性能有要求且函数不超过10行
- 想宏定义一个函数
- 在类内部定义的函数会默认声明为inline函数,这有利于类实现细节的隐藏
什么函数不适合内联?
- 函数体庞大,超过10行
- 函数体内含有循环,switch等语句
- 构造函数和析构函数不适合内联
- 虚函数尽量不要内联
- 递归函数不要内联