We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
please explain me why the sizeof (C51) returns 6 bytes for this struct instead of 5:
typedef struct DEKO_COMM_HEADER { UINT16 m_uiMsgOpcode; UCHAR8 m_sblMsgPriority :2; UINT16 m_sblDataLength :11; UINT16 m_sblMsgTimeStamp :11; }DEKO_COMM_HEADER, *PDEKO_COMM_HEADER;
UINT16 is typedef for unsigned int UCHAR8 is typedef for unsigned char
thanks
I don't know how you expected to get the size 5.
11+11+2 is 24 bits, but they can normally not be formed from 3 separate bytes, since a single byte can't store a bitfield with 11 bits. The compiler really want all fields for a bit field to be stored in the same byte/word/dword/xxx to allow all bits to be assignable with a single assign.
The compiler may use a single 32-bit number for all bit fields (giving a total size of 6).
The compiler may also allocate 2 16-bit numbers (one for each 11-bit value) and then decide to piggyback the 2-bit value into one of these 16-bit integers. This gives a total size of 6.
The compiler may decide that the 2-bit field should not be piggybacked, thereby consuming 5 bytes for the bit fields, and 2 bytes for the opcode. For a 8-bit processor, this may result in a 7 byte large struct. A 16 or 32-bit processor would then have to pad the struct to make sure that an array of structs always places the 16-bit integer on an even address, i.e. making the struct 8 bytes large.