pragma pack



  • Hallo zusammen

    Bisher war ich mir sicher, wie ich Elemente in Strukturen alignen kann und steh nun vor folgendem Problem

    #pragma pack(push, 2)
    typedef struct TSTRUCT1 {
    uint8_t ubElem1;
    uint8_t ubElem2;
    uint8_t ubElem3;
    } TSTRUCT1;
    #pragma pack(pop)

    Ich hätte mir nun erwartet, dass sizeof(TSTRUCT1) die Größe 6 liefert. Tatsächlich kommt aber 3 zurück.

    Sobald ich in die Struktur ein Element hinzufüge, welches Größer 1 Byte ist, arbeitet das Ganze so wie ich es mir erwarten würde.

    Getestet mit IAR 7.20, VS2008, …

    Kann mir bitte jemand erklären, wieso hier kein Padding stattfindet?

    Vielen Dank!!



  • MSDN schrieb:

    Die Ausrichtung eines Members erfolgt an einer Begrenzung, die entweder ein Vielfaches von n oder ein Vielfaches der Größe des Members ist, je nachdem, was kleiner ist.

    n ist bei dir die 2

    Die Einstellungen mit #pragma sind vom Compiler abhängig und haben mit Standard C eigentlich wenig zu tun.


Anmelden zum Antworten