Guten Morgen, nachdem ich eine struct mit einer int- und einer char-Variablen erstellt habe, habe ich mit Hilfe des sizeof-Operators die Größe von dem erstellten struct ermittelt. Diese beträgt 8 Byte, obwohl die darin enthaltenen Datentypen nur 5 Byte aufweisen. Ist das "Gerüst" einer struct immer 3 Byte groß? Vielen Dank!
Nein, es gibt kein Grundgerüst. Aber wenn da 32-Bit Daten drin sind, dann wird die Grösse auf die nächste 4-Byte Grenze aufgerundet, damit die Daten korrekt aligned sind.
A. K. schrieb: > auf die nächste 4-Byte Grenze aufgerundet je nach Compiler und Laufzeitumgebung; kann auch was anderes als 4 sein. (Nur zur Vervolständigung, nicht daß jetzt jemand meint, es wären immer 4...)
Ich dachte, dass 4 Byte(int) + 1 Byte(char) in einer struct 5 Byte ergeben!? Danke!
Da Mo schrieb: > Ich dachte, dass 4 Byte(int) + 1 Byte(char) in einer struct 5 Byte > ergeben!? Stimmt schon. Aber wenn hinter diesen 5 Bytes gleich die nächste solche struct landet, dann wird der Zugriff auf deine "int" je nach Prozessor und Implementierung entweder langsam oder fliegt dir um die Ohren. Weil diese int dann nicht mehr an einer durch 4 teilbaren Adresse liegt. Deshalb addiert der Compiler 3 ungenutzte Bytes hinten drauf. Wenn deine struct nicht aus einer int und einem char besteht, sondern aus 5 chars, dann sollten es wirklich nur 5 Bytes sein.
"Padding" um mal ein Stichwort für weitere Recherchen zu liefern
Vlad Tepesch schrieb: > "Padding" um mal ein Stichwort für weitere Recherchen zu liefern Wohl eher "member alignment"... ;-) Gruß Markus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.