结构体成员的顺序会影响结构体的大小吗

描述

相同的结构体成员,如果把顺序调整一下,会不会影响结构体的大小?

答案是会的,这主要跟字节对齐有关。

比如这样的结构体,前面两个是 char 类型,后面跟上一个 int 类型。

struct A
{
    char a;
    char b;
    int c;
};

它在内存中的排序是这样的,第一个 char 占 1 个字节,紧接着第 2 个 char 也占 1 个字节。

因为最后是个 int 类型,所以中间还要空 2 个字节。要保证 int 的偏移是 4 的整数倍。

结构体最终长度就是 8 个字节。

下面调整一下,把第 2 个 char 放到 int 的后面。

struct B
{
    char a;
    int b;
    char c;
};

第一个 char 任然占 1 个字节,由于后面是 int,中间还得空 3 个字节。

最后的 char 占 1 个字节。

由于 int 的存在,结构体的总长度必须是 4 的整数倍,所以结果就是 12。

成员的顺序一旦变了,他们在内存中的排布方式就会不一样,结果也就不同。
 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分