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

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

リンカは関数への分岐命令を使用する代わりに、小さな関数をインライン化できます。リンカがこれを行うには、関数(復帰命令は含まない)が分岐命令の 4 バイト以内に収まる必要があります。
以下のオプション使用して、関数のインライン展開を制御できます。
  • --inline コマンドラインオプションと --no_inline コマンドラインオプションにより、分岐インライン化を制御できます。ただし、ユーザーにより供給されるオブジェクトのインライン展開を無効にするのは --no_inline のみです。リンカは、デフォルトで、 ARM® C ライブラリから関数をインライン展開します。
  • --inline_type=type コマンドラインオプションにより、インライン展開を自在に制御できます。また、 ARM C ライブラリから関数をインライン化したり、インライン化を完全に無効にしたりすることができます。両方がコマンドラインに存在する場合、このオプションは、--inline をオーバライドします。
分岐インラインの最適化を有効にすると、リンカはイメージ内の各関数呼び出しをスキャンして、必要に応じてインライン展開します。リンカは、インライン展開に適した関数を検出すると、その関数呼び出しを呼び出し先関数の命令に置き換えます。
リンカは、未使用セクションが削除される前に分岐のインライン展開の最適化を適用するので、呼び出されなくなったインライン展開されたセクションも削除できます。

リンカは 32 ビットでエンコードされた Thumb BL 命令の代わりに、16 ビットでエンコードされた 2 つの Thumb 命令をインライン化できます。
インライン化関数をすべてリスト表示するには、--info=inline コマンドラインオプションを使用します。
関連する概念
4.9 関数のインライン化に影響を与える要因
4.3 未使用セクションの削除
関連する参考文書
12.75 --inline_type=type
12.71 --info=topic[,topic,…]
12.74 --inline、--no_inline
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.