c语言struct字节对齐 结构体成员的字节对齐?
结构体成员的字节对齐?
如何编程实现struct字节对齐问题?
字节对齐基本概念与对齐规则是什么?
24(如果按8字节对齐,则先前的intfloat仅为8字节,双8字节,char构成8字节=24)
struct PP{int afload B char D}OO sizeof(OO)12字节,它是按照4字节对齐的
对齐与内存中数据的位置有关。如果变量的内存地址是其长度的整数倍,则称为自然对齐。例如,在32位CPU中,如果整数变量的地址是0x00000004,则它自然对齐。
字节对齐的根本原因是CPU访问数据的效率。假设上面整数变量的地址不是自然对齐的,例如0x00000002,那么CPU需要访问内存两次,如果它接受它的值。第一次从0x00000002-0x00000003取短,第二次从0x00000004-0x00000005取短,然后合并得到所需的数据。如果变量的地址为0x00000003,则需要访问内存三次,第一次访问char,第二次访问简称char,第三次访问char,然后合并得到整数数据。如果变量处于自然对齐位置,则只能检索一次数据。有些系统对对齐非常严格,如SPARC系统。如果数据没有对齐,就会出现错误
例如:在16位计算机中,变量按2字节对齐。例如,虽然成员a是char类型,但是下一个成员B的地址在地址0x80000000中只占用1字节,但是下一个成员B的地址不能使用地址0x80000001,而必须使用地址0x80000002,地址按照字长对齐。上述结构占用的空间为24 28=16字节
c语言struct字节对齐 结构体字节对齐原则 字节对齐 结构体
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。