静态内联 __attribute__((always_inline)) 用于仅 header 的库?
static inline __attribute__((always_inline)) for a header only library?
static inline __attribute__((always_inline))
如果我在 header 中的每个函数定义之前使用它,它会保证内联吗?未使用的函数不会出现在它包含的翻译单元中吗?
一般来说,不能保证函数会被内联。 inline 关键字只是对编译器的提示。
来自 Clang 参考 (always_inline
):
Inlining heuristics are disabled and inlining is always attempted regardless of optimization level.
Does not guarantee that inline substitution actually occurs.
参考文献:
static inline __attribute__((always_inline))
for a header only library?
不,只是 static inline
。 static
使函数可以在 header、inline
中消除编译器警告。否 __attribute__
,因为这会使库 non-portable 遇到挫折,即内联长函数会增加代码大小。
让用户使用他想要的内联 - -O3
内联更多,-Os
内联更少。
f I use this before every function definition in a header will it guarantee inlining
是的。
will unused functions not be in the translation unit it’s included in?
他们将在翻译单元中。它们在该翻译单元中定义。
未使用的 static
函数将不会包含在来自编译该翻译单元的结果 object 代码中。这与使用 __attribute__((always_inline))
.
无关
static inline __attribute__((always_inline))
如果我在 header 中的每个函数定义之前使用它,它会保证内联吗?未使用的函数不会出现在它包含的翻译单元中吗?
一般来说,不能保证函数会被内联。 inline 关键字只是对编译器的提示。
来自 Clang 参考 (always_inline
):
Inlining heuristics are disabled and inlining is always attempted regardless of optimization level.
Does not guarantee that inline substitution actually occurs.
参考文献:
static inline __attribute__((always_inline))
for a header only library?
不,只是 static inline
。 static
使函数可以在 header、inline
中消除编译器警告。否 __attribute__
,因为这会使库 non-portable 遇到挫折,即内联长函数会增加代码大小。
让用户使用他想要的内联 - -O3
内联更多,-Os
内联更少。
f I use this before every function definition in a header will it guarantee inlining
是的。
will unused functions not be in the translation unit it’s included in?
他们将在翻译单元中。它们在该翻译单元中定义。
未使用的 static
函数将不会包含在来自编译该翻译单元的结果 object 代码中。这与使用 __attribute__((always_inline))
.