结构体的内存分配(对齐)


structStudent

{

char      x;

double  y;

int         z;

} a; 

sizeof(a)=24

char 偏移量为sizeof(char)  为1的倍数

short 偏移量为sizeof(short)  为2的倍数

int、long、float 偏移量为sizeof(int/long/float)  为4的倍数

double 偏移量为sizeof(double)  为8的倍数

分析:(1)为x分配空间,其起始地址跟结构体的起始地址相同(偏移量为0,是sizeof(char)的倍数),该成员变量占用sizeof(char)=1个字节;

(2)为y分配空间,此时对于结构体的起始偏移量为1,不是sizeof(double)的倍数(最小倍数),1+8=9个字节,为了满足对齐方式,系统自动 补齐7个字节,也就是16字节的偏移量。

(3)为z分配空间,此时对于构造器的起始偏移量为16,是sizeof(int)=4的倍数,满足对齐方式,所以该成员变量sizeof(int)=4个字节。

(4)综上所述占用的总字节数为1+8+7+4=20个字节数,但是必须满足,总字节数为最大字节数的最小倍数,20并不是sizeof(double)=8的倍数,为了满足对齐方式,系统会为其补齐到最小倍数的偏移量,也就是4个字节。所以最后算出来a占的总字节数为1+8+7+4+4=24。

例如:

struct Student

{

double  x;

char      y;

int         z;

} b;

sizeof(b)=8+1+3+4=16



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值