下面这个结构体的内存占用是什么样的,重点是union那里

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个字节。