Question

J'ai pensé que j'ai entendu que le D des classes de deux mots (2 void*) des frais généraux, au lieu d'un mot nécessaire en C++.J'ai aussi entendu dire que la vtable disposition est incompatible avec le C++.Je me souviens correctement?Si oui, quelle est la justification de ces décisions?

Était-ce utile?

La solution

Quelques petites choses:

  1. En C++, une classe qui n'a pas de fonctions virtuelles auront zéro les frais généraux.
  2. En D, une classe toujours hérite des fonctions virtuelles à partir de Object, donc il y en a toujours qui __vptr les frais généraux, mais aussi a une __monitor, que le C++ les objets de la classe n'ont pas.
  3. Dans les deux C++ et D, il y aura des vptr pour chaque interface que la classe implémente.

La vtable disposition est incompatible avec le C++ parce que D contient un pointeur vers un TypeInfo exemple, qui a runtime type d'informations à propos de la classe.C++ n'est évidemment pas le cas, donc c'est incompatible.

Autres conseils

Le pointeur supplémentaire est à un objet de moniteur pour les classes synchronisées (il y a apparemment été parlé de le retirer pour les classes non synchronisées, mais cela n'est pas arrivé).La mise en page est documentée dans le section abi de la spécification.

Je ne sais pas comment la mise en page disponible diffère de la manière dont les compilateurs C ++ le font.Quelqu'un d'autre peut probablement répondre à cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top