当前位置:首页 > 内存 > 正文

结构体和共用体的内存分配

  • 内存
  • 2024-06-02 05:51:04
  • 3739

一、共用体和结构体到底怎么去理解?

程序中定义了联合类型un。它的两个成员i和c占用相同的内存空间Main()使用un定义一个变量x.i表示它被解释为类型i,即int类型的该区域的数据,以及x、c[0]或x.c[1]表示该区域的数据以字符格式解释

这个问题的答案其实是不确定的,使用的系统不同,结果也会不同:

(1)假设系统的int类型占用2个字节,那么变量x需要的内存为2个字节,假设变量x分配的内存空间为2000~2001

程序中,x.c[0]=10

接下来,我们需要使用8位二进制输出转换为0000000100001010的Bytes值;,然后转换成对应的十进制结果为266

(2)假设系统的int类型占用4个字节,则变量x需要。内存为变量x的4个字节为2000~2003

程序中,x.c[1]=1,则将该区域的内容改为:

这样,由于无法确定int的高位部分,所以输出结果将是一个随机值


二、C语言联合体和结构体中变量所占内存unionU有两个成员变量,字符数组st占4个字节,整数i占4个字节,所以两者共用4个字节,unionU占4个字节。
StructA有两个成员变量,一个整数c占用4个字节,一个u类型的U联合体也占用4个字节。所以structA的大小就是两者之和,4+4=8字节。
注意,由于这些成员变量的大小都是4字节,所以不需要考虑字节填充等因素。