中易网

c语言 union 所占内存大小问题

答案:5  悬赏:30  
解决时间 2021-01-07 01:15
c语言 union 所占内存大小问题
最佳答案
联合体(union)
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union);
1)联合体是一个结构;

2)它的所有成员相对于基地址的偏移量都为0;

3)此结构空间要大到足够容纳最"宽"的成员;

4)其对齐方式要适合其中所有的成员;

下面举例说明:

如联合体

1 union U
2 {
3 char s[9];
4 int n;
5 double d;
6 };

s占9字节,n占4字节,d占8字节,因此其至少需9字节的空间。然而其实际大小并不是9,

用运算符sizeof测试其大小为16.这是因为这里存在字节对齐的问题,9既不能被4整除,

也不能被8整除。因此补充字节到16,这样就符合所有成员的自身对齐了。

从这里可以看出联合体所占的空间不仅取决于最宽成员,还跟所有成员有关系,

即其大小必须满足两个条件:

1)大小足够容纳最宽的成员;

2)大小能被其包含的所有基本数据类型的大小所整除。
全部回答
#include <stdio.h>
#include <stdlib.h>
main()
{
union overlay {
char letter;
int number;
};
union overlay ua;
printf("size ua:%d ",sizeof(ua));
printf("size letter:%d ",sizeof(ua.letter));
printf("size number:%d ",sizeof(ua.number));
exit(0);
}
union overlay {
char letter;
int number;
};
union overlay ua;
1。number占据的空间=sizeof(int)
.由编译系统系统的整型变量所占据的
.的内存决定,在TC中为2,在VC6中为4
2。leffter占据的空间原则上=sizeof(char)=1
.但是为了加快计算机访问内存的速度,
.常常采用偶地址对齐方式,所以在letter后
.面的一个字符空闲不用。
3。所以你的程序中
.sizeof(ua)=sizeof(int)+sizeof(1)+1个空闲=4
4。如果:
union overlay {
char letter1;
char letter2;
int number;
};
sizeof(overlay)就是4,那个空闲的部分被用起来了。
大小为4,即占用4个字节
union overlay {
char letter;
int number;
};
因为 char类型需要1个字节, int类型需要4个字节. 在一个union类型结构中,所有的成员公用同样的存储空间,其占用的大小为其成员中需要空间最大者,这里就是4个字节.
如果你在上述union中添加一double类型的成员, 其大小将变为8个字节.
在一个union类型结构中,所有的成员公用同样的存储空间,其占用的大小为其成员中需要空间最大者,这里就以int为准:
取决于你采用的系统,如果你的系统int型为2个字节,那就是2个字节。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
系统版本:Flyme 5.1.11.1Y谁知道这是魅蓝几
来例假了,右腹疼是怎么回事啊?
念旧情是什么意思
请问两头有点红,中间是黄色的娇子硬盒(龙凤
中国移动的合约机和从官方购买的手机有什么区
比喻刚起步用什么词语
能主宰自已命运的名人事例
lol光辉辅助女警,用什么英雄可以克制?
基金管理公司督察长制度是什么呢?
LOL牛头酋长那套黄色的西装皮肤哪里可以买?
以《希望工程》写一篇100词的英语作文
古诗:“一俯一仰一场笑”下一句
2017年5月16日到2018年1月31日是多少天
这款蕾丝婚纱如何?
求个诚信的外烟代购,诚求!
推荐资讯
我王者荣耀语音别人听不到
罗技g610和海盗船惩戒者红轴哪个好?
英语检查。。。
如何选择厨房和厨师
是每个蜜蜂都蛰人吗
春卷怎么做
如何解不等式(x+4)/(3-x)>=0
我刚刚订的机票时间订错了该怎么办
v家里面谁最好cos呢?服装,妆容等各方面都简
三防办全称
有一副对联,是一个著名作家,我忘了谁,在普
U互动机顶盒wi-Fi如何设置字母密码?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?