工会需要多少内存

时间:2015-01-21 18:27:36

标签: c++ c

我有以下联盟

typedef union rem{
    int addr;
    char addrbuf[32];
} foo;

union上的sizeof提供以下输出

foo addr;
printf("size is: %d\n",sizeof addr);

大小为:32

是否意味着union在定义时分配或需要与union中最大元素相等的内存?

2 个答案:

答案 0 :(得分:7)

  

是否意味着union在定义时分配或需要内存等于union中的最大元素?

是。分配最大成员的内存。这就是为什么union的成员存储在同一位置的原因。

假设int需要4个字节,对于union

union{
    char c;
    int i;
} U; 

内存将分配为:

enter image description here

请注意ci的重叠方式。实际上ci的第一个字节。

答案 1 :(得分:1)

联盟占用的内存与结构不同,将是联盟中最大成员的内存。但是根据实现情况,最后可能会有额外的填充,因此无法保证size of a union = size of the largest member。所以你可以说工会的规模至少是联盟中最大成员的规模。

附注:由于内存在联盟的所有成员之间共享,因此一次只有一个成员处于活动状态。