Maison  >  Article  >  développement back-end  >  Pourquoi l'Itanium C ABI émet-il des symboles à double constructeur ?

Pourquoi l'Itanium C ABI émet-il des symboles à double constructeur ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-21 17:26:12655parcourir

Why Does the Itanium C   ABI Emit Dual Constructor Symbols?

Double émission de symboles de constructeur

Explication : Itanium C ABI

L'Itanium C ABI spécifie la modification des noms de fonctions pour inclure des informations sur leurs paramètres et la fonctionnalité. Les noms des constructeurs suivent un modèle spécifique :

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

Les symboles doubles

Les symboles des constructeurs dans la bibliothèque apparaissent deux fois en raison des différents types de constructeurs émis par GCC :

  • C1 : Constructeur d'objet complet - Construit l'objet complet, y compris la base virtuelle classes.
  • C2 : Constructeur d'objet de base - Crée l'objet lui-même et initialise les données membres et les classes de base non virtuelles.

Polymorphisme et constructeurs de base

Même si la classe en question n'a pas de classes de base virtuelles, GCC émet toujours les deux constructeurs comme sous-produit de la prise en charge du polymorphisme. Si le polymorphisme n'est pas impliqué, GCC pourrait optimiser en émettant un seul constructeur.

Différences de noms de symboles

Les deux constructeurs ont des noms différents en raison des désignateurs C1 et C2 dans leurs noms mutilés, qui indiquent les différents types de construction qu'ils effectuent.

Conclusion

La double émission des symboles constructeurs est une conséquence de l'ABI Itanium C et prise en charge du polymorphisme, mais il peut être optimisé par GCC lorsque le polymorphisme n'est pas utilisé.

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!

Déclaration:
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