struktur im speicher
-
also ... ich bin ein wenig verwirrt was das speicherabbild von relativ ähnlichen strukturen angeht..
zum beispiel hat folgende struktur
struct test { unsigned __int8 Value1; unsigned __int8 Value2; unsigned __int8 Value3; };eine größe von 3 byte wobei alle bytes mit jeweils eine variable belegt ist ..
das is soweit ganz ok und auch nachvollziehbar .. wenn man jetzt aus 2 8Bit werten ein 16bit wert macht kommt folgendes raus...struct test { unsigned __int8 Value1; unsigned __int16 Value2; };so jetzt ist das ganze 4 byte groß .. guckt man sich den speicher der struktur byteweise an liegt Value1 auf byte 0 und Value2 beginnt auf byte 2 .. byte 1 bleibt ungenutzt... hm .. irgendwie ominoes aber es könnte ja sein das ein 16bit wert im speicher an einer adresse strehn muss die ein vielfaches von 16 ist also hab ich den 8bit wert nach unten gezogen .. das sieht dann so aus...
struct test { unsigned __int16 Value2; unsigned __int8 Value1; };diesmal ist das ding wieder 4 byte gross ... und das letzte byte wird nicht genutzt ...
.. jetzt meine frage warum wird die struktur 4 bytes groß .. es geht mir dabei nich um das eine byte ... ich will eigentlich nur wissen mit welcher begründung der compiler das macht
-
Hi,
siehe Dir dazu mal unter "Projekte->Optionen...->Erweiterte Compiler-Optionen" die Einstellungen für Datenausrichtung an. Wenn die Datenausrichtung nur für eine bestimmte Struktur angepasst werden soll, kann man dies so machen:
// enable byte alignment #pragma pack(push, 1) // do not use upper case (for Borland)!!! typedef struct STC_TEST { char test[6]; short test1; BYTE test2; WORD test3; }; // restore default packing #pragma pack(pop)Nighthero