虽然在某些情况下使用内联函数会非常方便,
内联函数有什么缺点吗?
结论:
显然,使用内联函数并没有错。
但值得注意的是以下几点!
过度使用内联实际上会使程序变慢。根据函数的大小,内联它可能会导致代码大小增加或减少。内联非常小的访问器函数通常会减少代码大小,而内联非常大的函数会显着增加代码大小。在现代处理器上,由于更好地使用指令缓存,较小的代码通常运行得更快。 - 谷歌指南
随着函数大小的增长,内联函数的速度优势趋于减弱。在某些时候,函数调用的开销与函数体的执行相比变得很小,并且失去了好处 - 来源
在少数情况下内联函数可能不起作用:
- 对于返回值的函数;如果存在 return 语句。
- 对于不返回任何值的函数;如果存在循环、switch 或 goto 语句。
- 如果函数是递归的。 -资源
__inline
关键字仅在您指定优化选项时才内联函数。如果指定了优化,是否__inline
取决于内联优化器选项的设置。默认情况下,只要运行优化器,内联选项就会生效。如果您指定 optimize ,如果您希望忽略__inline
关键字,则还必须指定 noinline 选项。 -资源
原文由 prakash 发布,翻译遵循 CC BY-SA 4.0 许可协议
值得指出的是,inline 关键字实际上只是给编译器的一个提示。编译器可能会忽略内联,而只是在某个地方为函数生成代码。
内联函数的主要缺点是它会 增加可执行文件的大小(取决于实例化的数量)。这在某些平台(例如嵌入式系统)上可能是一个问题,特别是如果函数本身是递归的。
我还建议使内联函数 非常小- 内联函数的速度优势往往会随着函数大小的增长而减少。在某些时候,函数调用的开销与函数体的执行相比变得很小,并且失去了好处。