struct "zu gross"?
-
Ich habe folgenden struct:
#pragma pack(push, 1) struct SPDHeader { unsigned short Handle; //(2Byte) unsigned short rMax; //(4Byte) unsigned short cMax; //(6Byte) unsigned short nPages; //(8Byte) unsigned short el_Size; //(10Byte) char Bezeichnung[36]; //(46Byte) char Mnemo[6]; //(52Byte) char SigTyp[2]; //(54Byte) double Skal0; //(62Byte) double Skal1; //(70Byte) char Dim[10]; //(80Byte) double MaxVal; //(88Byte) double MinVal; //(96Byte) unsigned short Mask; //(98Byte) char ParSign[2]; //(100Byte) char DMODE[3]; //(103Byte) bool gueltig; //(104Byte) unsigned short Status; //(106Byte) unsigned short Anzahl_Plaetze; //(108Byte) unsigned short Plaetze[32]; //(110Byte) unsigned short F_Pointer_Adr; //(112Byte) unsigned short F_Bel_Adr; //(114Byte) char F_Pointer_mnemo[6]; //(120Byte) char F_Bel_mnemo[6]; //(126Byte) char Station[6]; //(132Byte) char Store[6]; //(138Byte) char HangUp[6]; //(144Byte) unsigned short Verarbeitung; //(146Byte) unsigned int MaxIndex; //(150Byte) unsigned int Next; //(154Byte) char Dummy[296]; //(450Byte) };Mittels
sizeof(SPDHeader)erhalte ich eine größe von 512 Byte, was auch so sein soll. Addiere ich aber die Datentypen manuell zusammen, kommt eine größe von nur 450 Byte raus. Was ist mit den restlichen 62 Byte?
Gruß Vanish
-
-
Häufig werden die Member nach bestimmten Adressen ausgerichtet, um möglichst effizienten Zugriff zu gewähren (Alignment). Meistens entspricht diese Adressgrösse dem grössten Member. Wenn die Grösse der Struktur nicht als benutzter Platz, sondern als Differenz der letzten und ersten Adresse angesehen wird, kann sie schon grösser sein.
Man kann die automatische Ausrichtung aber glaube ich ausschalten.
-
Hmm ich dachte durch
#pragma pack(push, 1)
wird direkt an den Bytegrenzen ausgerichtet.
Aber egal, jetzt habe ich die Speicherausrichtung verstanden

Danke!Gruß Vanish
-
Du hast auch 62 Bytes unterschlagen bei "unsigned short Plaetze[32]"...
und dann paßt auch die Direktive "#pragma pack(push, 1)" (es stimmt, daß damit auf jedes Byte aligned wird).