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系统。如果获取未对齐的数据,则会发生错误。例如,char ch[8]char*P=& ch[1]int i=*(int*)P在运行时会报告为段错误,而X86上不会有错误,但效率会降低。
如何理解struct的内存对齐?
C中的结构对齐问题:结构占用的位数是数据的整数倍,结构成员占用的位数最长。在这种结构中,结构占用的比特数是双重类型的整数倍。虽然这种结构使用位场,但对结果没有影响。Int i占用四个字节,char J占用一个字节。这两个字节总共占用八个字节,尽管最后三个字节是无用的。inta本身占用4个字节,但与结构对齐需要8个字节。双B需要8个字节。总共8=24字节
例如,在16位计算机中,变量按2字节对齐。例如,虽然成员a是char类型,但是下一个成员B的地址在0x80000000中只有1个字节,但是下一个成员B的地址不能是0x80000001,而必须是0x80000002,根据字长对齐。上述结构占用的空间为24 28=16字节
c语言struct字节对齐 struct对齐原则 结构体对齐原则
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。