Itanium C ABI がデュアル コンストラクター シンボルを生成するのはなぜですか?

Barbara Streisand
リリース: 2024-11-21 17:26:12
オリジナル
677 人が閲覧しました

Why Does the Itanium C   ABI Emit Dual Constructor Symbols?

コンストラクター シンボルの二重発行

説明: Itanium C ABI

Itanium C ABI は、パラメーターに関する情報を含めるために関数名のマングリングを指定します。そして機能性。コンストラクター名は特定のパターンに従います:

_Z     | N      | <class_name>  | <ctor-type>          | E          | <parameters>
prefix | nested | `Thing` | Constructor | end nested | parameters: `int`
ログイン後にコピー

デュアル シンボル

GCC によって発行されるコンストラクターの種類が異なるため、ライブラリ内のコンストラクター シンボルは 2 回表示されます:

  • C1: 完全なオブジェクト コンストラクター - 仮想ベースを含む完全なオブジェクトを構築します
  • C2: 基本オブジェクト コンストラクター - オブジェクト自体を作成し、データ メンバーと非仮想基本クラスを初期化します。

ポリモーフィズムと基本コンストラクター

問題のクラスに仮想基底クラスがないにもかかわらず、GCC は依然として両方のコンストラクターを副産物として生成します。ポリモーフィズムをサポートします。ポリモーフィズムが関係しない場合、GCC はコンストラクターを 1 つだけ発行することで最適化できます。

シンボル名の違い

2 つのコンストラクターの名前は、マングルされた名前に C1 指定子と C2 指定子が含まれているため異なります。

結論

コンストラクターの二重放出シンボルは Itanium C ABI とポリモーフィズムのサポートの結果ですが、ポリモーフィズムが使用されていない場合は GCC によって最適化できます。

以上がItanium C ABI がデュアル コンストラクター シンボルを生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート