struct
-
ich habe folgendes struct:
struct customer
{
char szcustomername[40];
short int istypecustomer;
unsigned int uizipcode;
};warum wird bei folgdendem Befehl:
printf("%d\n",sizeof(struct customer));
48 ausgegeben?
-
Der Compiler fügt Nullbytes ein (hier ca. 2). Der Grund ist eine optimale Ausrichtung im Speicher.
-
char szcustomername[40] - 40byte
short int istypecustomer - 2 byte
unsigned int uizipcode - 4 byte
_______________________ _________
= Gesamt 46 byte
+ 2 Bits vom Compiler 48 bytekann man das so sagen?
wenn man noch ein short int einfügen würde, würden dann erneut 2 Füllbyte hinzukommen?
-
wenn man noch ein short int einfügen würde, würden dann erneut 2 Füllbyte hinzukommen?
Höchstwahrscheinlich. Aber warum probierst du's nicht einfach aus?
-
Vielleicht ist dein short int auch einfach 4 Byte groß?
-
Füg doch mal so ein:
struct customer { char szcustomername[40]; short int istypecustomer; short int nocheinshort; unsigned int uizipcode; };
-
Typischerweise (bei sowas wie x86) wollen PODs so aligned sein, dass die Adresse ein ganzahliges Vielfaches der eigenen Größe sind. Die Member eines struct dürfen nicht durchgewürfelt werden. Annahme: Auf deinem System ist short 2 byte und int 4 byte gross. Dann sollte man sehen, dass ihn das alignment des Members uizipcode (eigentlicher Adressoffset = 42) stört und deswegen nach istypecustomer 2 Füllbytes einfügt.
-
Btw:
Bei einem 64-Bit System wird auf 8 Byte und bei einem 32-Bit System auf 4 Byte ausgerichtet.