4.4 未使用仮想関数の削除

未使用の仮想関数の削除は未使用セクションの削除を改良したものです。

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

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

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

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

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

関連する概念
4.1 共通デバッグセクションの削除
4.2 共通グループまたは共通セクションの削除
4.3 未使用セクションの削除
関連する参考文書
12.168 --vfemode=mode
関連情報
--rtti、--no_rtti コンパイラオプション
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.