Virtuel Tableau de mise en page dans la mémoire?
comment sont des tables virtuelles stockées dans la mémoire? leur mise en page?
par exemple
class A{
public:
virtual void doSomeWork();
};
class B : public A{
public:
virtual void doSomeWork();
};
Comment sera la disposition des tables virtuelles de la classe A et de classe B dans la mémoire?
Peut-être vous êtes inquiet au sujet de la mémoire de modèle, car vous avez besoin de réutiliser certaines structures à partir d'une bibliothèque C dans votre programme C++. Pour cela, vous pouvez consulter ce lien: parashift.com/c++-faq/mixing-c-and-cpp.html
Si vous avez un peu de temps, essayez d'avaler que: Itanium ABI C++
Si vous avez un peu de temps, essayez d'avaler que: Itanium ABI C++
OriginalL'auteur pankajt | 2009-08-27
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont dit, c'est le compilateur personne à charge, et non pas quelque chose que vous avez vraiment besoin de penser dans la journée-à-jour utilisation de C++. Toutefois, si vous êtes tout simplement curieux au sujet de la question, vous devriez lire Stan Lippman, le livre de À l'intérieur de l'Objet C++ Modèle.
OriginalL'auteur
Pour le compilateur GCC sous Linux, exécutez:
La sortie est:
Aussi j'ai créé le vtable-dumper outil pour lister le contenu des tables virtuelles dans les objets partagés. Avec cet outil, vous n'avez pas besoin de compiler les en-têtes, juste l'exécuter sur l'objet:
BTW, ne prenez pas
(int (*)(...))
littéralement, c'est un espace réservé à un type de!OriginalL'auteur linuxbuild
vtable mise en mémoire est complètement dépendant du compilateur; il n'y a pas de "bonne" ou une approche universelle prises.
Wikipédia ( en.wikipedia.org/wiki/Virtual_method_table ) utilise g++ comme un exemple lors de la description de vtable disposition.
OriginalL'auteur DarkSquid
De wikipédia:
Donc la réponse est non. Mise en page de la vtable de la mise en œuvre est définie.
Je dirais que, compte tenu de "Virtuel Tableau de mise en page dans la mémoire?", c'est ouvert à des opinions différentes.
:)
"Mise en page de la vtable de la mise en œuvre est définie" Pas de. De nombreuses implémentations ne pas définir comment les vtables sont structurés, et de la norme ne dit rien sur les vtables, même pas qu'elles existent. La norme ne mentionne même pas vtables, de sorte qu'ils ne peuvent pas être "mise en œuvre définies".
OriginalL'auteur Naveen
Que les autres ont déjà écrit, il n'existe pas de méthode générale. (Zut, personne n'a même mandats que les tables virtuelles sont utilisé à tous.)
Cependant, je crois qu'ils sont probablement mis en œuvre comme un caché pointeur à un certain décalage dans l'objet qui fait référence à un tableau de pointeurs de fonction. Certaines fonctions virtuelles adresses occuper certains décalages dans le tableau. Habituellement, il y a aussi un pointeur vers le type dynamique de l'
std::type_info
objet.Si vous êtes intéressé par ce genre de choses, lire Lippmann "à l'Intérieur du C++ Object Model". Cependant, à moins que votre intérêt est académique (ou vous êtes en train d'écrire un compilateur C++ et -- mais alors vous ne devriez pas avoir besoin de demander), vous ne devriez pas la peine. C'est un détail d'implémentation, vous n'avez pas besoin de connaître et de ne pas compter sur.
OriginalL'auteur sbi
Pour une description très détaillée de Open Watcom's de la classe de mise en page ont un look à la La Classe De Mise En Page notes
OriginalL'auteur cmeerw