Maison > développement back-end > C++ > Pourquoi y a-t-il deux symboles de constructeur dans les bibliothèques C ?

Pourquoi y a-t-il deux symboles de constructeur dans les bibliothèques C ?

Patricia Arquette
Libérer: 2024-11-28 17:50:10
original
683 Les gens l'ont consulté

Why Are There Two Constructor Symbols in C   Libraries?

Double définition des symboles de constructeur dans les bibliothèques C

En C, les définitions de constructeur apparaissent deux fois dans les bibliothèques lorsqu'elles sont examinées avec nm. Cela est dû à l'ABI Itanium C, qui nécessite plusieurs entrées de constructeur pour la prise en charge du polymorphisme.

Les noms mutilés des constructeurs indiquent leur objectif :

  • C1 : Constructeur d'objet complet
  • C2 : Constructeur d'objet de base

Même si une classe ne peut pas avoir de classes de base virtuelles, GCC émet les deux constructeurs en raison de la prise en charge du polymorphisme par ABI. Ce comportement est considéré comme un problème connu dans GCC, où le compilateur pourrait potentiellement optimiser ce comportement lorsque le polymorphisme n'est pas impliqué.

Les différents types de constructeurs ont les significations suivantes :

  • Constructeur d'objet complet : construit l'objet entier, y compris les classes de base virtuelles.
  • Objet de base constructeur : crée l'objet lui-même et initialise les données membres et les classes de base non virtuelles.
  • Allocation du constructeur d'objet : rarement vu, exécute les actions du constructeur d'objet complet et en plus alloue de la mémoire à l'aide de l'opérateur new.

Bien que cette double émission de symboles constructeur ne pose généralement pas de problèmes, elle peut conduire à confusion lors de l'examen des symboles de bibliothèque avec des outils comme nm.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal