c 结构体 地址对齐

找工作的时候笔试题经常会考这个知识点,今天总结一下,有几大原则:

  1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除,这句话可能不是那么好理解,举个例子
 struct A
{
    int    a;
    char  b;
    short     c;
};

首先在指定对齐字节大小时,默认是结构体里最宽的基本类型,在上面例子中就是Int4字节,假设A从地址空间0×0000开始排放,0×0000%40,存放在0×0000,0×0001,0×0002,0×00003中,接下来是char b占一字节,0×0004%10,存放在0×0004中,最后是short c占2字节,由于0×0005%2==1,无法整除,这时就需要填充字节,c从0×0006开始存放,到0×0007为止
2. 如果结构体A含有结构体成员B,那么B的起始位置必须是B中最大元素大小整数倍地址;(结构体包含结构体中的情况)
3. 结构体的总大小,必须是内部最大成员的整数倍;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值