在Optimizing software in C++中,Agner Fog指出他不喜欢仅仅因为一个函数跨越了一定数量的行数就将其分解的规则。他认为这会导致不必要的跳转,从而降低性能。
首先,我明白如果我正在处理的代码不在紧密循环中,并且函数很重,那么调用它们所需的时间将被函数内部代码执行所占据的时间所淹没。但是让我们假设我正在使用大多数时间都由其他对象/函数使用并执行相对琐碎任务的函数。这些函数遵循上面提到的建议(即只执行单个功能并且小/易于理解)。然后,我开始编写一个性能关键函数,它在紧密循环中利用这些其他函数,并且本质上是一帧函数。最后,假设将它们内联对性能关键函数有益处,但对任何其他函数没有任何好处(是的,我已经进行了分析,尽管需要大量复制和粘贴,但我想避免这种情况)。
立即可以说将函数标记为inline
,让编译器选择。但如果我不想让所有这些函数都在一个.inl文件中或者在头文件中公开呢?在我的当前情况下,性能关键的函数和它使用的其他函数都在同一个源文件中。
总之,我是否可以有选择地(强制)内联一个函数(多个函数),以便最终代码的行为就像是一个大函数而不是对其他函数的多次调用。
static inline
并让编译器处理即可。如果它认为通过不内联它们会产生更好的代码,谁知道,也许它是对的。如果您指定编译器,人们可以建议任何其具有的选项来强制内联,但由于您似乎想要一个可移植解决方案,所以"让编译器优化,它比您更了解平台,因为您几乎不知道该平台"。 - Steve Jessop