使长函数内联

Making a long function inline

本文关键字:函数      更新时间:2023-10-16

假设我有一个10行的函数。如果我添加内联关键字,假设有50%的几率编译器会使它内联。

如果我有一个2行函数,它可能有90%的机会被内联。

我可以将10行函数的代码分成5个函数,使其内联的机会更好吗?

编译器没有内联它可能是有原因的,可能是需要注意的。此外,对于较长的函数,函数调用开销变得不那么重要,因此内联它们可能不那么重要(如果这是您唯一的原因)。

将函数分成5个小函数只会使你的代码一团糟,并且可能会混淆编译器并最终导致它没有内联任何东西。我不建议那样做。

取决于你的c++编译器,你可以强制它内联函数。Visual c++有__forceinline属性,以及如何处理内联以及在项目设置中使用它的频率的设置。正如Tony提到的,GCC的等效版本是__attribute__((always_inline))

您也可以使用一些预处理器技巧来内联代码本身,但我通常不建议这样做。

如果它使代码更具可读性,那就去做吧。如果不是,相信编译器,不要把你的代码弄乱,因为它可能会有帮助。编译器比你想象的要聪明得多,而且通常比你更清楚内联什么时候有用——什么时候没用,或者更糟的是,它会破坏东西。