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

C语言共用体内存

  • 内存
  • 2024-05-08 10:27:58
  • 791

一、关于C语言的union的内存覆盖问题结构体和联合体的区别在于,结构体的每个成员占用不同的内存,互不影响,而联合体的所有成员占用相同的内存,改变一个成员会影响其他所有成员;
结构体占用的内存大于等于所有成员占用的内存之和(成员之间可能有间隙),联合体占用的内存等于最长的占用的内存成员。Union采用内存重写技术,一次只能存储一个成员的值。如果为新成员分配了值,则原成员的值将被覆盖。Union也是一种用户定义类型,可用于创建变量。
二、c语言结构体共用体占内存字节需要看各个变量的字节对齐情况,这是本题的关键点。
Union:大小是union中最大的变量所占用的空间,所以上面的大小是union4.
结构体中的内存当分配空间时,先分配4个字节,然后当分配double时,找到字节对齐。double是一个8字节数组,因此double变量不会立即在union变量之后分配空间,而是在union后释放4个字节,然后再分配它,因此我们得到16个字节=4个字节union+null4。byte+double8bytes
但是如果转为int的话,int的字节对齐是4字节,union包含4字节,后面是4字节边界,所以如果使用int的话,就会如果你直接在union之后分配它,你会发现它的大小是8个字节。