Speicherbelegung einer Struktur mit union



  • Hallo Forum 😉 ,

    ich habe Daten, die mit einer Struktur wie dieser (myStruct1) gespeichert werden:

    typedef struct myStruct1
    {
    	unsigned int value1;
    	unsigned int value2 : 7;
    
    	union
    	{
    		myStruct2 str2;
    		myStruct3 str3;
    	};
    
    	unsigned int Reserved[2];
    };
    
    typedef struct myStruct2
    {
    	unsigned int value1 : 11;
    	unsigned int value2 : 11;
    	unsigned int value3 : 7;
    	unsigned int value4 : 1;
    	unsigned int value5 : 1;
    	unsigned int value6;
    };
    

    Jetzt muss ich unbedingt wissen, wie die Daten im Speicher liegen. Bei meinen Daten handelt es sich sicher um welche, die den Typ myStruct3 in der Union verwenden.

    Wird jetzt der 7-Bit Wert "value2" zusammen mit myStruct2.value1 und myStruct2.value2 in das selbe Byte geschrieben oder wird für die Elemente von "myStruct2" ein neues Byte begonnen?

    Im Klartext:

    Bekomme ich folgende Aufteilung der Daten auf die Bytes:

    Byte0: value1
    Byte1: value2,str2.value1,str2.value2
    Byte2: str2.value3,str2.value4,str2.value5
    Byte2: str2.value6
    Byte3: Array Pointer

    oder bekomme ich:

    Byte0: value1
    Byte1: value2
    Byte2: str2.value1,str2.value2,str2.value3,str2.value4,str2.value5
    Byte3: str2.value6
    Byte4: Array Pointer

    Das muss ich so genau wissen, da ich diese Daten über einen DLL Aufruf aus LabView bekomme bzw. schreiben muss - und dort kann ich nicht mit diesen Datentypen Arbeiten, sondern muss mir die Daten byteweise aus dem Speicher holen bzw. in den Speicher schreiben.

    Vielen Dank schonmal im Voraus!

    Viele Grüße

    Robert



  • Das dürfte vom Compiler abhängen. Probier doch einfach mal ein bisschen rum, dann findest du es sicher raus.


Anmelden zum Antworten