打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
sizeof(struct )大小讨论

 struct 结构大小和顺序、#progma pack参数有关系

针对字节对齐,环境使用的gcc version 3.2.2编译器(32x86平台)为例。

char 长度为1个字节,short 长度为2个字节,int 长度为4个字节。

struct 子项在内存中的按顺序排列,在没有#progma pack(n)参数的情况,各个子项的对齐系数为自己长度。

在有#progma pack(n)参数的情况,各子项的对齐系数为min(自己长度,n);

struct 整体的对其系数为子项对齐系数最大值

看下面的例题:

struct A{

char a;  //字长1对其系数1

char b;  //字长1对其系数1

char c;  //字长1对其系数1

};//整体对其系数为1

 sizeof(struct A)值是       

 

 

看下图

 

绿色为被填充的内存,黄色为空

因此sizeof(struct A)=3;

 

struct B {

    int a;           //对其系数4

    char b;       //对其系数1

    short c;     //对其系数2

};//整体对其系数4

 

sizeof(strcut B)值是      

 

如图

short c对其系数2必须和偶地址对其,int a同理也与能4的倍数地址对其。

粉色内存被结构占用

因此

sizeof(strcut B)=8

 

 

struct C {

    char b;   //对其系数1

    int a;      //对其系数4

    short c;  //对其系数2

};//整体对其系数4

 

sizeof(struct C)的值是     

如图

int a 从4的倍数地址开始,所以开始地址是4,因为结构整体对其系数为4,因此short c后的两个内存被占用,使大小为4的倍数。

sizeof(struct C)=12

 

#progma pack (2)

struct D {

    char b;    //对其系数min(长度=1,n=2)=1

    int a;       //对其系数min(长度=4,n=2)=2

    short c;   //对其系数min(长度=2,n=2)=2

};//整体对其系数2

sizeof(struct D)值是     

如图

 

#progma pack (2)  对int a的放置产生影响,

#progma pack (n)  只能取1、2、4

因此 sizeof(struct D)=8

 

至此stuct大小讨论,大致明了

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c/c++ struct union 对齐方式与#pragma pack()宏定义
也谈内存对齐 :: Tony Bai
【程序员一枚】C++基础之内存对齐
结构体对齐的具体含义|结构体,对齐,含义,
字节对齐
C语言结构体对齐问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服