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
Which compiler are you using ? Compiling your example shows a size of 7 which is correct since an UINT16 can hold a max. of 16 bits. Please look at the symbol listing for details on size and layout of the fields.
C51 COMPILER V8.08a, COMPILATION OF MODULE Q OBJECT MODULE PLACED IN q.OBJ COMPILER INVOKED BY: c51.exe q.c CODE SB line level source 1 typedef unsigned char UCHAR8; 2 typedef unsigned int UINT16; 3 4 typedef struct DEKO_COMM_HEADER { 5 UINT16 m_uiMsgOpcode; 6 UCHAR8 m_sblMsgPriority : 2; 7 UINT16 m_sblDataLength :11; 8 UINT16 m_sblMsgTimeStamp :11; 9 } DEKO_COMM_HEADER; 10 11 12 unsigned char z; 13 14 void main (void) { 15 1 z = sizeof (DEKO_COMM_HEADER); 16 1 } ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION main (BEGIN) ; SOURCE LINE # 14 ; SOURCE LINE # 15 0000 750007 R MOV z,#07H ; SOURCE LINE # 16 0003 22 RET ; FUNCTION main (END) NAME CLASS MSPACE TYPE OFFSET SIZE ==== ===== ====== ==== ====== ==== main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- UINT16 . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2 UCHAR8 . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 DEKO_COMM_HEADER . . . . . . . . . . . TYPEDEF ----- STRUCT ----- 7 m_uiMsgOpcode. . . . . . . . . . . . MEMBER ----- U_INT 0000H 2 m_sblMsgPriority . . . . . . . . . . MEMBER ----- FIELD 0002H 2.0 m_sblDataLength. . . . . . . . . . . MEMBER ----- FIELD 0003H 11.0 m_sblMsgTimeStamp. . . . . . . . . . MEMBER ----- FIELD 0005H 11.0 DEKO_COMM_HEADER . . . . . . . . . . . * TAG * ----- STRUCT ----- 7 m_uiMsgOpcode. . . . . . . . . . . . MEMBER ----- U_INT 0000H 2 m_sblMsgPriority . . . . . . . . . . MEMBER ----- FIELD 0002H 2.0 m_sblDataLength. . . . . . . . . . . MEMBER ----- FIELD 0003H 11.0 m_sblMsgTimeStamp. . . . . . . . . . MEMBER ----- FIELD 0005H 11.0 z. . . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0000H 1