0


0

gcc静的リンカーは、静的ライブラリの関数を適切にインライン化できますか?

lib.aという名前の静的ライブラリを使用する多数のソースコードをコンパイルすると、lib.aのインライン関数は残りのバイナリで適切にインライン化されますか?

2 Answer


0


いいえ、彼らはしません。 インライン化は解析ツリーでの操作であり、インライン化されたコードのホストソースとドナーソースの両方のソースコードにアクセスする必要があります。

静的ライブラリは、使用する時点ですでにソースからバイナリにコンパイルされているため、インライン化することはできません。

'' '' '

ただし、インライン化されていないコードも「適切」であり、正常に機能します(静的ライブラリにコンパイルされていると仮定した場合)。


0


まあ、インライン関数を呼び出すことさえ試みるために、その宣言は呼び出しサイトで見える必要があります。 それが「インライン」である場合、コンパイラはそれをインラインにするか、要求を完全に無視します。

ライブラリでインライン化されたインラインで宣言されていない関数は、最終製品にリンクするときにもインライン化できるかどうか疑問に思っている場合…​これは実装に依存し、すでにLTOが可能であると仮定するとライブラリに追加)、それらを再びインライン化できる可能性が非常に高くなります。 どこでもインライン化されている場合でも、実装に定義を含めるように要求される場合があります…​すべては実装に依存します。