未使用セクションの削除

未使用セクションの削除は、リンカによって実行される、イメージサイズに対する最も重要な最適化です。 リンカによって、アクセスされないコードとデータが最終イメージから削除されます。

未使用セクションの削除は、結果としてすべてのセクションが削除されるような場合には実行されません。

この最適を制御するには、--remove--no_remove--first--last、および --keep リンカオプションを使用します。

未使用セクションを削除するには、エントリポイントが必要です。 そのため、未使用セクションの削除が有効な場合に、イメージにエントリポイントが指定されていないときは、--entry リンカオプションを使用して、エントリポイントを指定し、未使用セクションを削除できるようにします。

Note

デフォルトでは、--dll を使用して DLL をビルドする場合、または --shared を使用して共有ライブラリをビルドする場合、未使用セクションの削除は無効になります。 そのため、未使用セクションの削除を再度有効にすには、--remove を明示的に含める必要があります。

--info unused リンカオプションを使用すると、削除された未使用セクションのリストを生成できます。

入力セクションは、以下の場合に最終イメージに保持されます。

Note

通常、コンパイラは関数とデータを一緒にまとめ、カテゴリごとに 1 つのセクションを生成します。 リンカでは、セクション全体が未使用の場合にのみ、そのセクションを削除できます。

ソースコード内の関数または変数は、__attribute__((used)) 属性を使用してマークできます。 そうすると、armcc によって各関数および変数に対してシンボル __tagsym$$used が生成され、関数や変数がリンカによって削除されることがなくなります。

また、--split_sections コンパイラコマンドラインオプションを使用して、ソースファイル内の関数ごとに 1 つの ELF セクションを生成するようにコンパイラに指示するともできます。

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612