場合によってはインライン関数を使用すると非常に便利ですが、
インライン関数に欠点はありますか?
結論:
どうやら、インライン関数を使用しても問題はありません。
ただし、次の点に注意してください。
インライン展開を使いすぎると、実際にはプログラムが遅くなる可能性があります。関数のサイズによっては、インライン化によってコード サイズが増減する場合があります。非常に小さなアクセサー関数をインライン化すると、通常はコード サイズが減少しますが、非常に大きな関数をインライン化すると、コード サイズが劇的に増加する可能性があります。最新のプロセッサでは、通常、命令キャッシュがより適切に使用されるため、小さなコードはより高速に実行されます。- Google ガイドライン
インライン関数の速度の利点は、関数のサイズが大きくなるにつれて減少する傾向があります。ある時点で、関数本体の実行に比べて関数呼び出しのオーバーヘッドが小さくなり、メリットが失われます- ソース
インライン関数が機能しない状況がいくつかあります。
- 値を返す関数の場合。return ステートメントが存在する場合。
- 値を返さない関数の場合。ループ、switch、または goto ステートメントが存在する場合。
- 関数が再帰的である場合。-ソース
この
__inline
キーワードにより、optimize オプションを指定した場合にのみ、関数がインライン化されます。最適化が指定されている場合、それが受け入れられるかどうか__inline
は、インライン オプティマイザ オプションの設定に依存します。デフォルトでは、オプティマイザが実行されるたびにインライン オプションが有効になります。__inline
optimize を指定する場合、キーワードを無視するには、 noinline オプションも指定する必要があります。-ソース