struct st
{
char ch,*ptr;
union
{
short a , b;
unsigned int c : 2 , d : 1;
};
bool f;
struct st *next;
};
union是共享内存,
一个short是两字节,两个是四字节
int是四字节,刚好两者可以用union
要根据所用的编译器来,这里以32位编译器作为说明:
ch:1 byte;
ptr: 4 bytes;
a,b,c,d: 共用4 bytes, c和d是位域变量;
bool: c\c++里面没这个类型,应该是用typedef定义的自定义类型,一般采用2个字节;
next: 4bytes;
1+4+4+(2)+4=15 bytes;
union是共享类存的,unsigned int c : 2 , d : 1; 是位段的。位字段没有独立的地址,不能进行取址操作; 位字段没有独立的存储空间,不能进行sizeof()操作。
位字段的内存分配规则:
位字段按声明顺序在机器字内存储。
位字段不能跨越机器字存储,上一个机器字空间不足时,该位字段将全部存到下一个机器字。
那么union那里应该是2个字节。