关于结构体内存对齐 - 自然对界 理论知识以及实验验证理解

关于结构体内存对齐 - 自然对界

理论知识以及实验验证理解

 

自然对界:既结构体内存对齐时各成员变量所占内存对齐时的边界。

结构体内存对齐:结构体各成员变量默认会向占内存最大成员变量靠齐。

如果结构体中包含其它结构体变量时,默认边界对齐时,寻找最大成员变量的范围会包含该结构体中的成员变量。

栗子如下:

struct A {

       char variableA;

       long variableB;

       char variableC;

};

struct B {

       char variable1;

       struct A structA;

       short variable2;

};

以上A、B结构体中,结构体A的默认对界以sizeof(long)为准,既sizeof(structA) = 12。结构体B的默认对界同样也将以sizeof(long)为准,既sizeof(structB) = 12 + 4 + 4。

以下伪指令可用于手动指定结构体变量对齐时向n字节靠齐:

#pragma pack(n):以下范围内结构体,编译器将按照n字节对齐

#pragma pack():以上,至此结束,取消自定义

      如果n大于结构体中最大成员的size时,则结构体仍将按照size最大的成员进行边界对齐。如果当最大成员size大于n时,则其余小于n的成员都将按照n对齐边界,大于n的仍将按照其自身size对齐。

栗子如下:

#pragma pack(4)//指定自然对界的对齐方式

struct A {

       char variableA;

       long long variableB;

       char variableC;

};

struct B {

       char variable1;

       struct A structA;

       short variable2;

};

#pragma pack()//取消自然对界的对齐

以上A、B结构体中,结构体A默认对界以n = 4为准,但超出n的成员变量variableB仍将以其自身size为准,既sizeof(structA) = 8 + 4 + 4。结构体B中的默认对界同样也以4为准,既sizeof(structB) = 16 + 4 + 4。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值