结构体的字节对齐问题

之前一直以为字节对齐没有问题,结果今天看书的时候发现了自己这部分还是掌握的不太好

1.先说最简单的

#include<stdio.h>
#include<string.h>
union data1{
    double d;
    int i;
    char c1;
    char c2[9];
};

int main()
{
    printf("%d",sizeof(union data1));
    return 0;
}
因为最大的类型是double8字节,所以以8字节对齐,char[9]自然分配了16字节

所以共用体占16字节

2.注意!!!不能固定记忆一定是以4字节取

#include<stdio.h>
#include<string.h>
struct data1{
    char c1;
    char c2[2];
};

int main()
{
    printf("%d",sizeof(struct data1));
    return 0;
}
因为最大是char,以1字节对齐,所以最后分配3字节,不是之前认为的4字节

3.分配空间的时候是看先后顺序的

struct data1{
    char c1;
    double d;
    char c2;
}one;


struct data2{
    char c1;
    char c2;
    double d;
}two;

两个都是以double的类型8字节对齐,但是one分配24字节,two分配16字节。



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值