Heim > Backend-Entwicklung > C++ > Warum erscheinen C-Konstruktorsymbole in statischen Bibliotheken zweimal?

Warum erscheinen C-Konstruktorsymbole in statischen Bibliotheken zweimal?

Susan Sarandon
Freigeben: 2024-11-27 22:33:11
Original
843 Leute haben es durchsucht

Why Do C   Constructor Symbols Appear Twice in Static Libraries?

Doppelte Emission von Konstruktorsymbolen

In mit GCC oder Clang kompiliertem C-Code erscheinen Konstruktordefinitionen in statischen Bibliotheken oft zweimal. Dieses Verhalten wirft Fragen über den Grund für diese Duplizierung und ihre Auswirkungen auf.

Ursache der doppelten Emission

Laut Itanium C ABI bestehen Konstruktor-verstümmelte Namen aus einem Präfix , ein verschachtelter Klassen- und Funktionsname, ein endverschachteltes Tag und Parameterinformationen. Für Konstruktoren in Klassen ohne virtuelle Basisklassen gibt GCC jedoch zusätzlich zwei Varianten aus: „vollständiger Objektkonstruktor“ (C1) und „Basisobjektkonstruktor“ (C2).

Diese doppelte Emission ergibt sich aus der Unterstützung des ABI für Polymorphismus. Auch wenn eine Klasse keine virtuellen Basisklassen hat, benötigt der ABI diese doppelte Emission, um die polymorphe Handhabung zu erleichtern.

Auswirkungen der doppelten Emission

Obwohl zwei Konstruktorsymbole ausgegeben werden, GCC ordnet den Symbolen während der Kompilierungsoptimierung einen Alias ​​für denselben Code zu. Dies bedeutet, dass es keine Mehrfachdefinitionsfehler gibt.

Darüber hinaus zeigt der für beide Konstruktorsymbole generierte Assemblercode, dass sie dieselbe zugrunde liegende Konstruktorlogik aufrufen. Unabhängig davon, welches Symbol aufgerufen wird, wird der vollständige Objektkonstruktor aufgerufen. Dieses Verhalten impliziert, dass das C2-Symbol ein Überbleibsel der ABI-Unterstützung für Polymorphismus ist, auch in Fällen, in denen dies nicht unbedingt erforderlich ist.

Das obige ist der detaillierte Inhalt vonWarum erscheinen C-Konstruktorsymbole in statischen Bibliotheken zweimal?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage