默认对齐方式: struct name1 { char str; 占用空间:2个字节 short x; 占用空间:2个字节 int num; 占用空间:4个字节 double xx; 占用空间:8个字节 }; struct name2 { char str; 占用空间:4个字节 int num; 占用空间:4个字节 short x; 占用空间:8个字节 (其实开始是2个字节,只是总字节数要是sizeof(double)的倍数) double xx; 占用空间:8个字节 }; struct name1=16个字节 struct name2=24个字节 这是什么原因呢? 这是编译时对齐的缘故。所要说明的是,32位机器,默认对齐是按照结构中占用空间最大的数据类型进行对齐 , 对于结构体中的某一成员item,它相对于结构首地址的实际字节对齐数目X应该满足 以下规则: X = min(n, sizeof(item))。 n 是编译器设定的最大对齐边界数。 如果n = 8 . struct name1 { char str; 偏移为0 ,从第一个字节位置存储,占1个字节 short x; 偏移为2 , 从第三个字节位置开始存储,占2个字节 int num; 偏移为4, 由于前两个占了4个字节,所以从第五个字节开始存储。占4个字节 double xx; 偏移为8,由于前两个占了8个字节,所以从第9个字节开始存储。占8个字节 }; 一共占16个字节。 struct name2 { char str; 偏移为0 ,从第一个字节位置存储,占1个字节 int num; 偏移为4, 由于前两个占了1个字节,所以从第五个字节开始存储。占4个字 short x; 偏移为2 ,由于前两个占了8个字节 从第九个字节位置开始存储,占2个字节 double xx;偏移为8,由于前两个占了10个字节,所以从第17个字节开始存储。占8个字节 }; 一共占24个字节
关于struct结构中字节对齐问题
最新推荐文章于 2022-05-13 22:27:21 发布