gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:38:30 27 4
gpt4 key购买 nike

在书中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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com