Przesunięcie w strukturze z polami bitowymi

Jeśli mamy strukturę z polami bitowymi, to w jaki sposób kolejne elementy są wyrównane w strukturze? Rozważ następujący kod:

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));

Wydajność:

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

Tutaj, w pierwszym przypadku,b jest przydzielany tylko w drugim bajcie struktury bez dopełnienia. Ale w drugim przypadku, gdy pola bitowe przepełnią się 4 bajty,c jest przydzielany w ostatnim (8) bajcie.

Co dzieje się w drugim przypadku? Jaka jest reguła dla wypełniania w strukturach obejmujących pola bitowe w ogóle?

questionAnswers(2)

yourAnswerToTheQuestion