c语言结构体对齐规则 c语言中变量存储为什么要内存对齐?
c语言中变量存储为什么要内存对齐?
为了加快计算机的数据获取速度,编译器会在默认情况下对结构进行处理(事实上,其他地方的数据变量也是如此),这样宽度为2的基本数据类型(short等)位于可被2整除的地址,宽度为4的基数数据类型(int等)位于地址可被4整除,依此类推。这样,可能需要在两个数字之间添加填充字节,因此整个结构的sizeof值会增加。
字节对齐的细节与编译器实现有关,但一般来说,满足三个标准:1)结构变量的第一个地址可以除以其最宽基本类型成员的大小;2) 结构的每个成员相对于结构的第一个地址的偏移量是成员大小的整数倍。如果需要,编译器将在成员之间添加内部加法;
3)结构的总大小是结构最宽基本类型成员大小的整数倍。如果需要,编译器将在最后一个成员之后添加训练填充。
C语言中结构体占用内存大小的问题?
不,相同结构占用的内存是相同的。stone和sttwo之间的差异是由于内存对齐问题造成的。在获取内存时,根据主机系统的位数,它是一个32位系统。对于64位系统,每次取4个字节,对于64位系统,每次取8个字节。根据sizeof的结果,您的系统是32位的,因此每次提取4个字节,而一个字节提取Char type占用1个字节,int占用4个字节,因此Char type自动占用4个字节。否则,如果char占用一个字符并得到一个char,然后转到int变量的前三个,就会出现问题。因此,您将得到上述sizeof的结果。Sttwo不会得到结果,因为两个char类型相邻,所以两个char类型占用4个字符,得到结果我们先占用两个char,然后是int。
c语言结构体对齐规则 c语言结构体定义和使用 内存大小端判断
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。