typedef union DO_PORT_TYPE_R {
volatile uint32 xval;
struct {
uint8 resv[2];
//uint32 :16;
volatile uint32 DO_PT_TYPE : 8;
uint8 resv1;
};
}DO_PORT_TYPE_R;
字节对齐时,只会对相邻的类型不同的变量按照结构体成员中最大的字节数补齐,如上述结构体成员中最大的成员是 uint32,占4字节,则结构体其余成员均按照4字节不齐,最后联合体的大小为 3个uint32 也就是12字节;
typedef union DO_PORT_TYPE_R1 {
volatile uint32 xval;
struct {
uint8 resv[2];
uint8 DO_PT_TYPE;
//uint8 resv1;
};
}DO_PORT_TYPE_R1;
如果结构体中的成员变量类型相同,则不会不齐,上面结构体的大小为1个uint32,也就是4个字节