Double émission de symboles de constructeur
Dans le code C compilé avec GCC ou clang, les définitions de constructeur apparaissent souvent deux fois dans les bibliothèques statiques. Ce comportement soulève des questions sur la raison de cette duplication et ses implications.
Cause de la double émission
Selon l'ABI Itanium C, les noms mutilés des constructeurs sont constitués d'un préfixe , une classe imbriquée et un nom de fonction, une balise imbriquée de fin et des informations sur les paramètres. Cependant, pour les constructeurs dans les classes sans classes de base virtuelles, GCC émet en plus deux variantes : « constructeur d'objet complet » (C1) et « constructeur d'objet de base » (C2).
Cette double émission découle de la prise en charge par l'ABI de polymorphisme. Même si une classe n'a pas de classes de base virtuelles, l'ABI nécessite cette double émission pour faciliter la gestion polymorphe.
Implications de la double émission
Malgré l'émission de deux symboles constructeur, GCC alias les symboles avec le même code lors de l'optimisation de la compilation. Cela signifie qu'il n'y a pas d'erreurs de définition multiples.
De plus, le code assembleur généré pour les deux symboles constructeur démontre qu'ils appellent la même logique de constructeur sous-jacente. Quel que soit le symbole appelé, le constructeur d'objet complet est invoqué. Ce comportement implique que le symbole C2 est un vestige de la prise en charge du polymorphisme par l'ABI, même dans les cas où cela n'est pas strictement nécessaire.
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!