问题描述
- 下面这个结构体的内存占用是什么样的,重点是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: cc++里面没这个类型,应该是用typedef定义的自定义类型,一般采用2个字节;
next: 4bytes;
1+4+4+(2)+4=15 bytes;
解决方案三:
union是共享类存的,unsigned int c : 2 , d : 1; 是位段的。位字段没有独立的地址,不能进行取址操作; 位字段没有独立的存储空间,不能进行sizeof()操作。
位字段的内存分配规则:
位字段按声明顺序在机器字内存储。
位字段不能跨越机器字存储,上一个机器字空间不足时,该位字段将全部存到下一个机器字。
那么union那里应该是2个字节。
时间: 2024-09-20 00:00:32