Bases de la programmation en C
struct S { char c; int i; char d; };
struct T { int i; char c; char d; };
printf("%zu %zu\n", sizeof(struct S), sizeof(struct T));On considère un environnement courant où char fait 1 octet et int 4 octets, et où les int sont placés à des adresses multiples de 4. Quelle est la sortie obtenue en exécutant le code ci-dessus ?
- A6 6
- B9 6
- C12 8
Afficher la réponse et l'explication
Réponse : C. 12 8
Un int est placé à une adresse multiple de 4 : dans struct S, 3 octets de remplissage (padding) sont insérés après c, i est placé au décalage 4 et d au décalage 8. De plus, la taille de la struct entière est arrondie au multiple de 4 supérieur pour que i reste aligné dans chaque élément d'un tableau de structs : 3 octets sont ajoutés après les 9 octets, ce qui donne 12 octets. Dans struct T, c et d suivent i, soit 6 octets, arrondis à 8 octets. Ranger les membres du type le plus grand au plus petit réduit le padding.
Continuer : 9 autres questions sur Bases de la programmation en C