c++ - 我可以选择性地(强制)内联函数吗?

标签 c++ optimization coding-style inline

在书中Clean Code (以及我遇到并阅读过的其他几个)建议保持函数很小,如果它们变大则将它们分解。它还建议函数应该只做一件事且只做一件事。

Optimizing software in C++ Agner Fog 表示他不喜欢仅仅因为函数越过一定数量的行的阈值就将其分解的规则。他指出,这会导致不必要的跳转,从而降低性能。

首先,我明白,如果我正在处理的代码不是处于紧密循环中并且函数很繁重,因此调用它们所花费的时间与代码中的时间相比相形见绌。函数需要执行。但是让我们假设我正在使用大多数时候被其他对象/函数使用并且正在执行相对微不足道的任务的函数。这些功能遵循第一段中列出的建议(即执行一个单一功能并且很小/易于理解)。然后我开始编写一个性能关键函数,它在一个紧密的循环中利用这些其他函数,本质上是一个框架函数。最后,假设内联它们对性能关键功能有好处,但对任何其他功能没有任何好处(是的,我已经对此进行了分析,尽管我想避免大量的复制和粘贴)。

马上,可以说标记函数 inline 并让编译器选择。但是,如果我不希望所有这些函数都在 `.inl 文件中或在 header 中公开,该怎么办?在我目前的情况下,性能关键函数和它使用的其他函数都在同一个源文件中。

总而言之,我是否可以选择性地(强制)内联单个函数的函数,以便最终代码表现得像一个大函数,而不是多次调用其他函数。

最佳答案

没有什么可以阻止您将 inline 放入 .cpp 文件中的静态函数中。

一些编译器可以选择强制内联函数,参见例如GCC 属性((always_inline)) 和大量用于微调内联优化的选项(请参阅 -minline-* 参数)。

我的建议是在您认为合适的地方使用 inline 甚至更好的 static inline,并让编译器决定。他们通常做得很好。

关于c++ - 我可以选择性地(强制)内联函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7108797/

相关文章:

c++ - 在 C++ 中向下思考

c++ - 与 memset 不同,placement new 能否存活优化?

debugging - AWK 优化

language-agnostic - 在类层次结构的中间有空类是否有代码味?

c - int[]是什么意思

c++ - 如何检测 const 参数的中间函数值变化?

c++ - 是否可以使用 Arduino IDE 包含来自另一个库的库?

c++ - 为什么有些 STL 算法提供额外的 '_if' 函数而不是重载?

python - 可替换多个可迭代对象或与订单无关的产品的高效组合

php - 如何避免CodeIgniter中 Controller 代码臃肿?