【发布时间】:2012-04-12 19:26:43
【问题描述】:
我正在研究宏,发现了很多关于宏和内联函数之间区别的资料和问题。但是没有什么可以具体说明和区分内联函数与普通函数的优缺点。
但是如果我想在普通函数和内联函数之间进行选择呢?
我知道使用内联函数会增加代码大小。但是,虽然研究规模不是主要问题,但效率是目标。使函数成为内联函数意味着对函数的调用尽可能快。(由于堆栈和填充开销)
总是使用内联函数好还是不好?如果不是,那么为什么?与内联相比,使用普通函数有什么好处?
在阅读其他问题时,我读到内联只是对编译器的提示。编译器可能会忽略它。编译器何时会忽略它以及为什么?
【问题讨论】:
-
有些函数不能内联。例如,递归函数。
-
没有黄金法则。有时内联更好(以保存函数调用和堆栈操作),有时它不值得(代码大小增加太多)。你不会找到The One True Answer,它不存在。
-
很好,其他人呢。因为我很少使用递归函数。
-
编译器内联的决定通常使用heuristic来决定。
-
顺便说一句,对于带有
inline标记的函数必须发生的事情,当它的定义 出现在多个编译单元中时,它不会产生链接器冲突。所以你可以安全地把它放在头文件中。从这个意义上说,inline使得一个函数在多个单元中内联成为可能。