sizeof与结构体数据对齐

数据对齐

处理结构体中的成员时,成员在内存中的起始地址编码必须是成员类型所占字节数的整数倍。

数据类型所占字节数见:类型尺寸

sizeof计算结构体尺寸规则

结果必须是结构体中占用空间最多的成员所占字节数的整数倍。

例1:计算此结构体的空间 sizeof(st1)

struct st1
{
    char a;
    short b;
    int c;
    double d;
};

 此结构体成员中占空间最多的成员是double类型,8字节。即结果是8的整数倍16。

例2:计算此结构体的空间 sizeof(st2)

struct st2
{
    char a;
    short b;
    double c;
    int d;
};

结果是24。

结构体嵌套时的sizeof运算

例1:

struct s1
{
    char a[4];
}

sizeof(struct s1) = 4;

a[4]可以看成4个char。 结构体s1中最大占空间最多的基本类型是char,而不是char[4]。

例2:

struct s2
{
    char a[4];
    char b;
}

同理,sizeof(struct s2) = 5。

例3:

    struct s3
    {
        struct s_a
        {
            int a;
        } a;
        char b;
    };

这种多重结构体的情况,思路看最底层的数据的占空间的大小。

这里内层sizeof(struct s_a) = 4,是s3的各级成员中占空间最多的。s3的大小是4的整数倍。

sizeof(struct s3) = 8。

例4:

    struct s4
    {
        struct s_a
        {
            char a[4];
        } a;
        char b;
    };

同理,s4中占空间最大的类型是char。

sizeof(strcut s4) = 5。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值