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

共用体占用的内存图解

  • 内存
  • 2024-06-07 21:43:48
  • 4096

一、结构体中的共用体?

26字节。因为-

TurboC(早期)是一个2字节的int,而int变量占用2个字节。

Union只取成员中占用字节数最多的成员所占用的字节数,为2,原因与之前相同。

按照规则计算:intno:2字节,charname[20]:20字节,charsex:1字节,union:2字节,共25字节。(其实这里有一个对齐问题,就是占用字节总数必须能被占用字节最大的成员变量的字节数整除;这里是2,并且大于25的最小整数所以它可以被2整除等于26,因此系统必须为w分配26个字节)


二、c语言结构体共用体占内存字节Union:
sizeof(union
data1)的值为16,根据编译器的默认设置,这个union的最大基本类型是double,占用8个字节,所以union这个链接以8用于对齐。字符数组c2占用9个字节,所以整个对齐会占用9个字节,但根据对齐原理,实际分配给它的内存是16个字节。
结构体:
struct
数据按8字节对齐,成员1为long类型,分配8字节。s、i、c和a最初分别占用4、2、1和10个字节。出于对齐的考虑,s分配4个字节,i分配2个字节,c分配2个字节。至此,8个字节已经用完。a最初分配了10个字节。在考虑对齐的时候,整个结构体占用的存储空间必须是8的倍数,所以分配给它16个字节。因此,结构数据占用8+4+4+2+16=32字节。
三、在C语言中下面变量占用的内存字节是多少?

unionare

注意:

数组中元素a的长度为9字节,b的长度为2字节,元素c的长度为8字节

union中,最大长度为元素c,因此内存的起始和结束对齐为8的倍数,补码为2*8=16Byte

指的是16个字节在图像的灰色区域


structarew

structarew
{
字符a[9];//10字节(内存空间填满到偶数地址)
shortintb;2字节
longintc;/>字符;//8Byte(union前最后一个A结构体元素在8的地址倍数处完成,因此下一个union从8的地址倍数开始)
Unionared;//16字节(如上)
};