Grundlagen der Programmiersprache 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));char habe 1 Byte und int 4 Byte, und int werde wie in üblichen Umgebungen an Adressen ausgerichtet, die ein Vielfaches von 4 sind. Welche Ausgabe erzeugt der obige Code bei der Ausführung?
- A6 6
- B9 6
- C12 8
Antwort und Erläuterung anzeigen
Antwort: C. 12 8
int wird so abgelegt, dass seine Adresse ein Vielfaches von 4 ist; in struct S folgen auf c daher 3 Füllbytes (Padding), i liegt ab Byte 4 und d bei Byte 8. Damit auch in einem Array solcher Strukturen das i jedes Elements ausgerichtet ist, wird zudem die Gesamtgröße auf ein Vielfaches von 4 aufgerundet: An die 9 Byte werden 3 Byte angehängt, was 12 Byte ergibt. In struct T folgen c und d auf i, was 6 Byte ergibt, aufgerundet 8 Byte. Ordnet man die Member vom größten Typ abwärts an, lässt sich das Padding verringern.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C