Возможный дубликат:
Почему sizeof для структуры не равен сумме sizeof каждого члена?
Я пытался понять концепцию битовых полей. Но я не могу понять, почему размер следующей структуры в CASE III составляет 8 байтов.
СЛУЧАЙ I:
struct B
{
unsigned char c; // +8 bits
} b;
sizeof (b); // Вывод: 1 (поскольку беззнаковый char занимает в моей системе 1 байт)
СЛУЧАЙ II:
struct B
{
unsigned b: 1;
} b;
sizeof(b); // Output: 4 (because unsigned takes 4 bytes on my system)
СЛУЧАЙ III:
struct B
{
unsigned char c; // +8 bits
unsigned b: 1; // +1 bit
} b;
sizeof(b); // Output: 8
Я не понимаю, почему для случая III на выходе получается 8. Я ожидал 1 (char) + 4 (unsigned) = 5.
unsigned char
занимает один байт в каждой системе. - person Carl Norum   schedule 06.10.2012struct
с однимchar
(например, в случае I) тоже занимает один байт. Другой компилятор мог бы добавить к структуре три байта заполнения. - person MSalters   schedule 06.10.2012