Envoy� par
Jean-Marc.Bourguet
En C et en C++, le compilateur ne peut pas reordonner les champs lui-meme (en C++, il peut reordonner les sections entre private:, protected: et public: mais pas les champs a l'interieur d'une section, je n'ai pas connaissance d'un compilateur qui le fasse).
J'ai pris l'hypothese (qui est le cas de quasiment toutes les archi 32 bits) ou l'alignement d'un char est le byte, d'un double est 8 bytes, d'un int 4 bytes. Cad que les adresses doivent etre un multiple de ces valeurs (c'est au moins plus efficace de faire ainsi, parfois c'est impose par le proc qui genere une exception ou fait des choses plus ou moins bizarres -- certains ignorent les bits de poids faibles de l'adresse p.e. -- quand ce n'est pas le cas).
Donc c1 a l'offset 0.
d a un offset multiple de 8 superieur a 0, donc c'est 8, laissant 7 bytes inutilises.
c1 a un offset superieur a 8, donc c'est 9.
i a un offset multiple de 4, superieur a 9, donc c'est 12 laissant 3 bytes inutilises.
La taille totale doit etre un multiple de l'alignement le plus fort (8 ici). 16 est bien un multiple donc il n'y a pas de padding a la fin.