我有以下联盟
typedef union rem{
int addr;
char addrbuf[32];
} foo;
union上的sizeof提供以下输出
foo addr;
printf("size is: %d\n",sizeof addr);
大小为:32
是否意味着union在定义时分配或需要与union中最大元素相等的内存?
答案 0 :(得分:7)
是否意味着union在定义时分配或需要内存等于union中的最大元素?
是。分配最大成员的内存。这就是为什么union
的成员存储在同一位置的原因。
假设int
需要4个字节,对于union
union{
char c;
int i;
} U;
内存将分配为:
请注意c
和i
的重叠方式。实际上c
是i
的第一个字节。
答案 1 :(得分:1)
联盟占用的内存与结构不同,将是联盟中最大成员的内存。但是根据实现情况,最后可能会有额外的填充,因此无法保证size of a union = size of the largest member
。所以你可以说工会的规模至少是联盟中最大成员的规模。
附注:由于内存在联盟的所有成员之间共享,因此一次只有一个成员处于活动状态。