4.12 リンカによる関数のインライン展開

リンカは指定するオプションと入力ファイルの内容に応じて、関数をインライン展開します。

リンカは関数への分岐命令を使用する代わりに、小さな関数をインライン化できます。リンカがこれを行うには、関数(復帰命令は含まない)が分岐命令の 4 バイト以内に収まる必要があります。

以下のオプションが関数のインライン展開に使用できます。

  • 分岐インラインを制御するには、--inline コマンドラインオプションと --no_inline コマンドラインオプションを使用します。ただし、--no_inline だけがユーザ定義オブジェクトのインライン展開を無効にします。デフォルトでは、リンカは ARM C ライブラリからの関数をインライン展開します。

  • --inline_type=type コマンドラインオプションによりインライン展開を自在に制御できるようになります。また、ARM C ライブラリからの関数をインライン展開し、インライン展開を完全に無効にすることもできます。両方がこのコマンドラインに存在する場合は、このオプションは --inline をオーバーライドします。

分岐インラインの最適化を有効にすると、リンカはイメージ内の各関数呼び出しをスキャンして、必要に応じてインライン展開します。リンカは、インライン展開に適した関数を検出すると、その関数呼び出しを呼び出し先関数の命令に置き換えます。

リンカは、未使用セクションが削除される前に分岐のインライン展開の最適化を適用するので、呼び出されなくなったインライン展開されたセクションも削除できます。

リンカは 32 ビットでエンコードされた Thumb BL 命令の代わりに、16 ビットでエンコードされた 2 つの Thumb 命令をインライン展開できます。

インライン関数をすべてリスト表示するには、--info=inline コマンドラインオプションを使用します。

関連する概念
4.13 関数のインライン化に影響を与える要因
4.3 未使用セクションの削除
関連する参考文書
12.75 --inline_type=type
12.71 --info=topic[,topic,…]
12.74 --inline、--no_inline
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.