J'ai une classe qui va comme ceci:Pourquoi mon objet occupe-t-il 64 octets et non 32?
class myType
{
union {
float data[4];
other_vector4_type v
} ;
typedef union {
float data[4];
other_vector4_type v
} myType-internal_t;
<various member functions, operator overloads>
}
Maintenant, je veux utiliser ce type dans mon vertex buffer, mais le sizeof()
est pas comme prévu. J'ai aligné la classe à 16 octets.
sizeof(myType)
cède 64.
sizeof(myType::myType-internal_t)
rendements 32.
J'ai lu assez peu d'articles sur l'alignement des données, mais je ne sais pas où j'utilise des données supplémentaires. J'ai essayé d'enlever le constructeur personnalisé, mais il reste le même, l'échange du mot-clé de classe pour struct
ne change pas non plus (je ne comprends pas ce que c'est, car il arrive!)
Ceci est ennuyeux, je ' J'utiliserai le type interne pour le moment car je ne toucherai pas souvent aux données, mais ce serait bien que la classe fonctionne comme je le souhaite.
Dites-nous à quoi ressemble other_vector_type. – bmargulies
Vous devriez clarifier la partie code de votre question ... –
Un cas de test complet (qui compile et utilise une syntaxe correcte) aiderait à résoudre le vrai problème. –