Offset in einer Struktur mit Bitfeldern

Wenn wir eine Struktur mit Bitfeldern haben, wie sind dann die nachfolgenden Elemente in der Struktur ausgerichtet? Betrachten Sie den folgenden Code:

struct A{
    int a:1;
    char b;     // at offset 1
};

struct B{
    int a:16;
    int b: 17;
    char c;     // at offset 7
};

printf("Size of A: %d\n", (int)sizeof(struct A));
printf("Offset of b in A: %d\n", (int)offsetof(struct A, b));

printf("Size of B: %d\n", (int)sizeof(struct B));
printf("Offset of c in B: %d\n", (int)offsetof(struct B, c));

Ausgabe:

Size of A: 4
Offset of b in A: 1
Size of B: 8
Offset of c in B: 7

Hier im ersten Fall,b wird nur im 2. Byte der Struktur ohne Auffüllung zugewiesen. Aber im zweiten Fall, wenn Bitfelder 4 Bytes überlaufen,c wird im letzten (8.) Byte vergeben.

Was passiert im 2. Fall? Was ist die Regel für das Auffüllen von Strukturen mit Bitfeldern im Allgemeinen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage