黑马程序员技术交流社区

标题: 结构体的存储问题 [打印本页]

作者: 晗修    时间: 2015-6-7 11:27
标题: 结构体的存储问题
今天看视屏看到结构体的存储问题时
视频中 struct A {    short   a; char   b; float c; double d;  }
structB {    short   a; float c;  char   b;double d;  }
两个结构体占用字节数分别是16 和24 ;但是视频中没有说清楚,自己查了下结构体的存储,分享下结果;
结构体存储时对齐分两个步:
这里我们认为pragama pack没有定义 无视他
1)结构体成员的对齐
此时对齐模数是当前要对齐的结构体成员的长度和【#pragma pack】中较小的那个
structA: a占用 2字节;
                b是char 1个字节 已经对齐 所以a到b是3字节;   
                c是float  占用4字节,但是之前a到b只占用了3字节,前面要补齐一个 ,所以a~c占用4+4=8个字节
                d是double 占用8字节   a~c也是8ge 无需对齐 所以整体占用8+8=16个字节
structB: a占用 2字节;
                b是float 4个字节 没有对齐 所以a之后要补2个字节   所以a到b是2+2+4=8个字节;   
                c是char 占用1字节,已经对齐,所以a~c占8+1=9个字节
                d是double 占用8字节   a~c是9个字节 对齐需补足7个字节  所以 a~d要占用9+7+8=24个字节

2)结构体整体的对齐
此时对齐模数是当前要(所有结构体成员中最长的)和【#pragma pack】中较小的那个
A和B都已经对齐,这个步骤其实很简单 就看步骤1得到的能不能被最长的整除 不能就补;可以的话就不用了。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2