ホームページ >バックエンド開発 >C++ >C コンストラクターのシンボルが静的ライブラリに 2 回現れるのはなぜですか?

C コンストラクターのシンボルが静的ライブラリに 2 回現れるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-27 22:33:11818ブラウズ

Why Do C   Constructor Symbols Appear Twice in Static Libraries?

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

GCC または Clang でコンパイルされた C コードでは、コンストラクター定義が静的ライブラリで 2 回現れることがよくあります。この動作により、重複の理由とその影響について疑問が生じます。

デュアル エミッションの原因

Itanium C ABI によると、コンストラクターのマングル名はプレフィックスで構成されています。 、ネストされたクラスと関数の名前、ネストされた終了タグ、およびパラメーター情報。ただし、仮想基本クラスを持たないクラスのコンストラクターの場合、GCC はさらに、「完全オブジェクト コンストラクター」 (C1) と「基本オブジェクト コンストラクター」 (C2) の 2 つのバリアントを発行します。

この二重の発行は、ABI のサポートに由来しています。多態性。クラスに仮想基本クラスがない場合でも、ABI ではポリモーフィックな処理を容易にするためにこの二重放出が必要です。

二重放出の影響

2 つのコンストラクター シンボルを発行しているにもかかわらず、 GCC は、コンパイルの最適化中にシンボルを同じコードにエイリアスします。これは、複数の定義エラーがないことを意味します。

さらに、両方のコンストラクター シンボルに対して生成されたアセンブリ コードは、それらが同じ基礎となるコンストラクター ロジックを呼び出すことを示しています。どのシンボルが呼び出されるかに関係なく、完全なオブジェクト コンストラクターが呼び出されます。この動作は、厳密に必要でない場合でも、C2 シンボルが ABI の多態性サポートの名残であることを意味します。

以上がC コンストラクターのシンボルが静的ライブラリに 2 回現れるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。