Forum: PC-Programmierung dynamische Speicherverwaltung/sizeof-Operator


von Da Mo (Gast)


Lesenswert?

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!

von (prx) A. K. (prx)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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...)

von Da Mo (Gast)


Lesenswert?

Ich dachte, dass 4 Byte(int) + 1 Byte(char) in einer struct 5 Byte 
ergeben!?

Danke!

von (prx) A. K. (prx)


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

"Padding" um mal ein Stichwort für weitere Recherchen zu liefern

von Markus V. (valvestino)


Lesenswert?

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
Noch kein Account? Hier anmelden.