未使用仮想関数の削除

未使用セクションの削除を使用すると、未使用関数を効率的に C コードから削除できます。 C++ アプリケーションでは、仮想関数やランタイム型情報(RTTI)オブジェクトが、vtable と呼ばれるポインタテーブルによって参照されています。 追加の情報がないと、リンカではどの vtable エントリが行時にアクセスされるのか判断できません。 つまり、リンカで使用されている標準の未使用セクション削除アルゴリズムでは、未使用の仮想関と RTTI オブジェクトを確実に削除することを保証できません。

仮想関数の削除(VFE)は、C++ コードから生成されたイメージの ROM サイズを縮小するために未使用セクションの削除を改良したものです。 この最適化を使用すると、未使用の仮想関数および RTTI オブジェクトをコードから削除できます。

複数の関数が含まれる入力セクションについては、すべての関数が未使用の場合にのみ削除されます。 リンカは、未使用関数を含むセクション内から、未使用関数を削除することはできません。

VFE は ARM コンパイラとリンカによる連携です。コンパイラが未使用の仮想関数に関する追加情報をリンカに提供し、リンカがその情報を使用します。 コンパイラによる分析に基づき、リンカは未使用の仮想関数および RTTI オブジェクトを確実に削除できます。

Note

VFE を使用する場合は、C++ を使用するすべてのオブジェクトに VFE の注釈が含まれている必要があります。 リンカがオブジェクトのシンボルテール内で符号化された C++ シンボル名を検出し、VFE 情報が存在しない場合、この最適化は無効になります。

コンパイラは、.arm_vfe という名前で始まるセクションに追加情報を配置します。 これらのセクションは VFE に対応していない場合、リンカによって無視されます。

Show/hide関連項目

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