内联长函数

pas*_*ena 4 c++ optimization stl

假设我有一个 10 行函数。如果我添加 inline 关键字,假设编译器有 50% 的机会将其内联。

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

我可以将 10 行函数中的代码拆分为 5 个函数,以便更好地内联吗?

ssu*_*ube 5

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

将函数拆分为 5 个小函数只会使代码变得混乱,并且可能会使编译器感到困惑,最终导致它不内联任何内容。我不建议这样做。

根据您的 C++ 编译器,您也许能够强制它内联该函数。Visual C++ 具有该__forceinline属性,以及如何处理内联以及在项目设置中使用内联的频率的设置。正如托尼提到的,GCC 等效项是__attribute__((always_inline)).

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

  • 对于 GCC,例如 `inline void foo(char) __attribute__((always_inline));` (3认同)