struct内存对齐规则 如何理解struct的内存对齐?
如何理解struct的内存对齐?
C中的结构对齐问题:结构占用的位数是数据的整数倍,结构成员占用的位数最长。在这种结构中,结构占用的比特数是双重类型的整数倍。虽然这种结构使用位场,但对结果没有影响。Int i占用四个字节,char J占用一个字节。这两个字节总共占用八个字节,尽管最后三个字节是无用的。inta本身占用4个字节,但与结构对齐需要8个字节。双B需要8个字节。字节总数为8=24
24(前8个字节按8字节对齐,后8个字节按双8字节对齐,字符按8字节补全=24)
struct PP{int afloat B char D}OO sizeof(OO)12字节按4字节对齐
有四个内存对齐原则:
1)。数据成员对齐规则:结构(或联合)的数据成员。第一个数据成员放置在偏移量为0的位置。之后,每个数据成员存储的起始位置从成员大小或其子成员大小的整数倍开始(只要成员有子成员,如数组、结构等)(例如,如果在32位计算机中int是4字节,则应从4的整数倍地址开始存储)。基本类型不包括struct/class/Uinon。
2) . struct as member:如果一个结构中有一些结构成员,那么应该从结构中“最宽的基本类型成员”的整数倍地址存储结构成员。(结构a包含结构B,而B包含char、int、double和其他元素,那么B应该从8的整数倍存储。)。
3) . 收尾工作:结构的总尺寸,即sizeof的结果,必须是结构内部最大构件的“最宽基本型构件”的整数倍。弥补不足。(基本类型不包括struct/class/Uinon)。
4) . sizeof(Union),结构中最大的元素是Union的大小,因为在特定时间,只有Union的一个成员实际存储在地址中。
如何编程实现struct字节对齐问题?
内存对齐的目的和规则?
struct内存对齐规则 c语言struct字节对齐 struct对齐原则
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。