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

结构体占用内存的规则

  • 内存
  • 2024-06-01 14:17:48
  • 6658

一、c语言结构体共用体占内存字节你得看每个变量的字节对齐情况——这是这个问题的关键点
union——size是union中最大变量占用的空间,所以上面union的大小是4
结构体中,当你在内存中分配空间时,首先分配4个字节给联合空间,所以当你需要分配一个double时,你发现double的字节对齐了是一个8字节数组,所以doublec变量不会在union变量之后立即分配空间,而是会在union之后留下4个字节空闲然后再分配,所以我们得到16字节=4个union字节+4个空字节+double8字节
但是如果改成int的话,int的字节对齐是4个字节,union占用4个字节,后面是4个字节的边界,所以如果用int的话,就会在If合并后直接分配空间,您将获得8字节的大小。


二、C语言中结构体占用内存大小的问题不,相同的结构占用相同的内存。
stOne和stTwo不同的原因是内存对齐问题。
取内存时,根据主机系统的位数来取
32位系统,每次取4个字节
64位系统,每次取8个字节/>根据你的size结果,你的系统是32位的,所以每次取4个字节,stOnechar类型保存1,int4,所以char类型自动保存4个字节,否则如果char保存一,它转到char,它们转到前三个int变量,因此您的大小结果将大于
stTwo,而不是两个字符,因此两个char类型将包含四个。


三、C语言,结构体问题?所占内在字节数,怎么算的???C语言中如何计算结构体长度和联合体长度?
结构体的长度等于主体中每个变量成员的长度。这题的长度是字符串数组的长度加上两个int变量的长度,再加上double的长度,最后的结果是10+2+2+8=22。分析:char的每个字符占用一个字节(因为是十长度的字符数组),所以是10个字节,int占用两个字节,double占用8个字节。所以最后就是10+2*2+8=22。
联合的长度是身体四肢之间的最长长度。如果联合的最大长度为12个字节,则联合的长度将为12。
希望这对您有所帮助。如有任何问题?