Heim >Backend-Entwicklung >C++ >Warum gibt der Itanium C ABI Dual-Konstruktor-Symbole aus?

Warum gibt der Itanium C ABI Dual-Konstruktor-Symbole aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-21 17:26:12734Durchsuche

Why Does the Itanium C   ABI Emit Dual Constructor Symbols?

Duale Emission von Konstruktorsymbolen

Erklärung: Itanium C ABI

Das Itanium C ABI spezifiziert die Verstümmelung von Funktionsnamen, um Informationen über ihre Parameter einzuschließen und Funktionalität. Konstruktornamen folgen einem bestimmten Muster:

_Z     | N      | <class_name>  | <ctor-type>          | E          | <parameters>
prefix | nested | `Thing` | Constructor | end nested | parameters: `int`

Die dualen Symbole

Die Konstruktorsymbole in der Bibliothek erscheinen aufgrund der unterschiedlichen Arten von Konstruktoren, die von GCC ausgegeben werden, zweimal:

  • C1: Vollständiger Objektkonstruktor – Konstruiert das vollständige Objekt, einschließlich der virtuellen Basis Klassen.
  • C2: Basisobjektkonstruktor – Erstellt das Objekt selbst und initialisiert Datenmitglieder und nicht virtuelle Basisklassen.

Polymorphismus und Basiskonstruktoren

Auch wenn die betreffende Klasse keine virtuellen Basisklassen hat, gibt GCC dennoch beide Konstruktoren als Nebenprodukt der Unterstützung von Polymorphismus aus. Wenn kein Polymorphismus beteiligt ist, könnte GCC optimieren, indem es nur einen Konstruktor ausgibt.

Unterschiede bei Symbolnamen

Die beiden Konstruktoren haben aufgrund der C1- und C2-Bezeichner in ihren verstümmelten Namen unterschiedliche Namen, was darauf hindeutet die verschiedenen Arten von Konstruktionen, die sie ausführen.

Schlussfolgerung

Die doppelte Emission von Konstruktorsymbolen ist eine Folge der Itanium C ABI und Unterstützung für Polymorphismus, kann aber durch GCC wegoptimiert werden, wenn Polymorphismus nicht verwendet wird.

Das obige ist der detaillierte Inhalt vonWarum gibt der Itanium C ABI Dual-Konstruktor-Symbole aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn