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?