Basis van programmeren in 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));Neem een gebruikelijke omgeving aan waarin char 1 byte en int 4 bytes is, en int op adressen wordt geplaatst die een veelvoud van 4 zijn. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?
- A6 6
- B9 6
- C12 8
Antwoord en toelichting tonen
Antwoord: C. 12 8
int wordt geplaatst op een adres dat een veelvoud van 4 is, dus in struct S worden na c 3 bytes opvulling (padding) ingevoegd, staat i op byte-offset 4 en d op offset 8. Bovendien wordt de grootte van de hele struct naar boven afgerond op een veelvoud van 4, zodat i in elk element van een array van structs goed uitgelijnd blijft; na de 9 bytes worden dus 3 bytes toegevoegd, wat 12 bytes geeft. In struct T volgen c en d op i, samen 6 bytes, wat naar boven wordt afgerond op 8 bytes. Door de members van het grootste naar het kleinste type te ordenen, wordt de padding kleiner.