5.20 インライン関数

インライン関数を使用すると、コードサイズとパフォーマンスのトレードオフをとることができます。デフォルトで、コードをインライン展開すべきかどうかは、コンパイラによって自動的に決定されます。

原則として、-Ospace を使用してコンパイルする場合、コンパイラは、最小サイズのコードを生成するという観点から、インライン展開に関して適切な判断を下します。これは、組み込みシステムにとって、基本的にコードサイズが重要であるためです。-Otime を使用してコンパイルする場合、ほとんどのケースでインライン展開が行われる一方で、コードの増大化も回避されます。NEON の場合、ループ内部から非インライン関数を呼び出すとベクトル化が抑制されるため、ベクトル化を行うにはインライン展開を明示的に指示する必要があります。
ほとんどの場合、特定の関数をインライン展開すべきかどうかの判断は、コンパイラに任せるのが賢明です。ただし、適切なインラインキーワードを使用して、特定の関数をインライン展開する必要があることをコンパイラに示すことは可能です。
__inline inline 、または __forceinline キーワードで修飾されている関数は、インライン関数と呼ばれます。C++ では、クラス、構造体、または共用体内で定義されているメンバ関数もインライン関数です。
コンパイラには、インライン展開に関する動作を変更するための、さまざまな機能も用意されています。これらの機能を使用すべきかどうか、またはそもそも関数をインライン展開すべきかどうかを決定する際は、いくつかの要素を考慮に入れる必要があります。
リンカは非常に短い関数に対してある程度の関数のインライン展開を適用できます。
関連する概念
5.21 関数のインライン展開に関するコンパイラによる決定
5.22 関数の自動インライン展開とスタティック関数
5.23 インライン関数と、リンク時における未使用のアウトオブライン関数の削除
5.24 関数の自動インライン展開とマルチファイルのコンパイル
5.26 コンパイラモードとインライン関数
5.27 C++ および C90 モードでのインライン関数
5.28 C99 モードでのインライン関数
5.29 インライン関数とデバッグ
関連する参考文書
5.25 関数のインライン展開に関するコンパイラの決定をオーバーライドすることの制限
8.15 --autoinline、--no_autoinline
8.84 --forceinline
10.6 __forceinline
10.8 __inline
8.107 --inline、--no_inline
関連情報
--inline、--no_inline リンカオプション
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.