Why does the sizes of these two structs differ?
#pragma pack(push, 1) struct WordA { uint32_t address : 8; uint32_t data : 20; uint32_t sign : 1; uint32_t stateMatrix : 2; uint32_t parity : 1; }; struct WordB { uint8_t address; uint32_t data : 20; uint8_t sign : 1; uint8_t stateMatrix : 2; uint8_t parity : 1; }; #pragma pack(pop) Somehow WordB occupies 6 bytes instead of four, while WordA occupies exactly 32 bits. I assumed that given the sum of used bits inside a struct would yield both structs to be of the same size. Apparently I am wrong, but I cannot find an explanation why. Bit fields page shows only examples when all of the struct members are of the same type, which is a case of WordA.
Can anybody explain, why the sizes don't match and if it is according to the standard or implementation-defined?
bitfield doesn't split between different underlying types.I figured that might be the reason, but I would like to have some reference to the standard.addresswhich is not a bitfield with the rest of the bitfields?