インライン関数

インライン関数を使用すると、コードサイズとパフォーマンスのトレードオフをとることができます。デフォルトで、コードをインライン展開すべきかどうかは、コンパイラによって自動的に決定されます。原則として、-Ospace を使用してコンパイルする場合、コンパイラは、最小サイズのコードを生成するという観点から、インライン展開に関して適切な判断を下します。これは、組み込みシステムにとって、基本的にコードサイズが重要であるためです。-Otime を使用してコンパイルする場合、ほとんどのケースでインライン展開が行われる一方で、コードの増大化も回避されます。NEON の場合、ループ内部から非インライン関数を呼び出すとベクトル化が抑制されるため、ベクトル化を行うにはインライン展開を明示的に指示する必要があります。

ほとんどの場合、特定の関数をインライン展開すべきかどうかの判断は、コンパイラに任せるのが賢明です。ただし、適切なインラインキーワードを使用して、特定の関数をインライン展開する必要があることをコンパイラに示すことは可能です。

__inlineinline、または __forceinline キーワードで修飾されている関数は、インライン関数と呼ばれます。C++ では、クラス、構造体、または共用体内で定義されているメンバ関数もインライン関数です。

コンパイラには、インライン展開に関する動作を変更するための、さまざまな機能も用意されています。これらの機能を使用すべきかどうか、またはそもそも関数をインライン展開すべきかどうかを決定する際は、いくつかの要素を考慮に入れる必要があります。

Note

プロファイルを利用した最適化は関数のインライン展開に影響を及ぼす場合があります。

リンカは非常に短い関数に対してある程度の関数のインライン展開を適用できます。

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0472BJ
Non-ConfidentialID011811