6 votes

Taille d'une classe en C++

J'étais en train de tester la taille des classes de base et des classes dérivées en C++.

class X {}; 
class Y : public virtual X {}; 
class Z : public virtual X {}; 
class A : public Y, public Z {};

La taille de chaque X, Y, Z, A est respectivement de 1, 8, 8, 12. Je ne parviens pas à comprendre cela. Je sais que la taille par défaut d'une classe vide est de 1. Donc je pourrais comprendre que la taille de X est de 1. Je sais que la taille de Y et Z ne sera pas de 1 car un pointeur virtuel y sera ajouté. Mais 8? Je ne comprends pas. Est-ce que quelqu'un peut expliquer ?

2voto

Karadur Points 1006

Cela dépend de l'implémentation dans votre compilateur. Par exemple, j'ai obtenu 1, 8, 8, 16 sur GCC.

Pour la classe Y, elle peut créer une table virtuelle pour la base virtuelle X plus 1 octet pour le corps de la classe vide. Après un alignement sur 4 octets, cela fait 8 octets au total.

MAJ : Cela peut aussi dépendre de si vous compilez pour une architecture 32 ou 64 bits. Le pointeur de table virtuelle sur une plateforme 64 bits prendra 8 octets, d'où les tailles de Y et Z.

La réponse complète à votre question dépend donc du compilateur et de la plateforme cible.

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