43 votes

Liste des problèmes C ++ ABI

J'ai souvent discuté du fait que le C ++ ne possède pas une ABI standard de la même manière que le C. Je suis curieux de savoir quels sont exactement les problèmes. Jusqu'à présent, je suis venu avec

  1. Nom branlant
  2. Gestion des exceptions
  3. RTTI

Existe-t-il d'autres problèmes ABI relatifs à C ++?

42voto

Loki Astari Points 116129

Sur le dessus de ma tête:

C++ Spécifiques:

  • D'où le " il " paramètre peut être trouvé.
  • Comment les fonctions virtuelles sont appelés
    • ie t-il une vtable ou d'autres
    • Quelle est la disposition des structures utilisées pour la mise en œuvre de cette.
  • Comment sont multiples définitions traités
    • Plusieurs instanciations du modèle
    • Fonctions en ligne qui n'ont pas été insérée.
  • Statique De La Durée De Stockage Des Objets
    • Comment gérer la création (dans la portée globale)
    • Comment gérer la création de la fonction locale (comment voulez-vous ajouter pour le destructeur de la liste)
    • Comment gérer la destruction de détruire dans l'ordre inverse de la création)
  • Vous mentionnez des exceptions. Mais aussi comment les exceptions sont traitées à l'extérieur de main()
    • soit avant ou après le main()

Génériques.

  • Passage de paramètres emplacements
  • Valeur de retour de l'emplacement
  • Membre de l'alignement
  • Rembourrage
  • Registre d'utilisation (dont les registres sont conservés qui sont de zéro)
  • la taille des types primitifs (comme int)
  • format de types primitifs (format à virgule Flottante)

24voto

Lindydancer Points 13353

D'après mon expérience, le gros problème est la bibliothèque standard C ++. Même si vous aviez une ABI qui dicte la manière dont une classe doit être agencée, différents compilateurs fournissent différentes implémentations d'objets standard, comme std::string et std::vector .

Je ne dis pas qu'il ne serait pas possible de normaliser la disposition interne des objets de bibliothèque C ++, mais seulement que cela n'a pas été fait auparavant.

9voto

ysdx Points 2444

La chose la plus proche que nous avons à un standard de l'ABI C++ est le "Itanium ABI C++":

http://sourcery.mentor.com/public/cxx-abi/

"ce document est écrit comme une spécification générique, pour être utilisable en C++ implémentations sur des architectures variées. Toutefois, il ne contient pas de processeur-le matériel spécifique pour l'Itanium 64 bits ABI, identifiés comme tels."

Voir http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Compatibility.html#Compatibility

"À partir de GCC 3.2, GCC binaire conventions pour le C++ est basé sur un écrit, le fournisseur neutre de l'ABI C++ qui a été conçu pour être spécifique à 64 bits, Itanium, mais comprend également des spécifications génériques qui s'appliquent à n'importe quelle plateforme. Cette ABI C++ est également mis en œuvre par d'autres éditeurs de compilateurs sur certaines plates-formes, notamment GNU/Linux et les systèmes BSD"

5voto

user3768831 Points 11

Un ABI standard pour n'importe quelle langue doit vraiment venir à partir d'une plate-forme donnée qui veut soutenir une telle chose. Les normes linguistiques en particulier C/C++ ne peut pas vraiment le faire pour de nombreuses raisons, mais principalement parce que une telle chose serait de faire de la langue de moins en moins flexibles et moins portable et donc de moins en moins utilisé. C n'est pas vraiment défini ABI, mais de nombreuses plates-formes à définir (directement ou indirectement) une. La raison de ce qui n'est pas le cas avec le C++ est parce que la langue est beaucoup plus grand et les changements sont faits le plus souvent. Cependant, Herb Sutter a une proposition très intéressante sur la façon d'obtenir plus de plates-formes pour créer norme ABIs et comment les développeurs peuvent écrire du code qui utilise l'ABI dans un façon standard:

https://isocpp.org/blog/2014/05/n4028

Il souligne à quel point C++ a une manière standard de lien dans une plate-forme C, ABI, mais pas un ABI C++ via extern "C". Je pense que cette proposition pourrait aller un long chemin pour permettre à des interfaces d'être définies en termes de C++ au lieu de C.

1voto

David Hammen Points 17912

J'ai souvent discuté du fait que le C ++ ne possède pas une ABI standard de la même manière que le C.

Quelle norme C ABI? L’annexe J de la norme C99 fait 27 pages. Outre le comportement indéfini (et certaines implémentations confèrent à UB un comportement bien défini), il couvre les comportements non spécifiés, les comportements définis par l'implémentation, les comportements spécifiques à l'environnement local et les extensions communes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X