美文网首页
二 结构体字节对齐

二 结构体字节对齐

作者: Mjs | 来源:发表于2020-09-08 17:59 被阅读0次

原则

1.数据成员的对齐规则(以最大的类型字节为单位)。

结构体(struct)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存放在offset为该数据成员大小的整数倍的地方(比如int在32位机为4字节,则要从4的整数倍地址开始存储)

2.结构体作为成员的对齐规则。

如果一个结构体B里嵌套另一个结构体A,则结构体A应从offset为A内部最大成员的整数倍的地方开始存储。(struct B里存有struct A,A里有char,int,double等成员,那A应该从8的整数倍开始存储。),结构体A中的成员的对齐规则仍满足原则1、原则2。

注意:

  1. 结构体A所占的大小为该结构体成员内部最大元素的整数倍,不足补齐。
  2. 不是直接将结构体A的成员直接移动到结构体B中

3.收尾工作

结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。

代码

typedef struct{
    char a;
    int b;
    char c;
}A;
sizeof(A) = 12

[a, *,*,*]
[b,b,b,b]
[c,*,*,*]
typedef struct{
    char a;
    char c;
    int b;
}A;
sizeof(A) = 8
[a, c,*,*]
[b,b,b,b]

接下来我们结构体套结构体

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

typedef struct{
    char d;
    double e;
    int f;
    A g;
}B;

sizeof(B) = 48
[d,*,*,*,*,*,*,*]
[e,e,e,e,e,e,e,e]
[f,f,f,f,*,*,*,*]
[a,*,*,*,*,*,*,*]
[b,b,b,b,b,b,b,b]
[c,c,c,c,*,*,*,*]
typedef struct{
    char a;
    double b;
    int c;
}A;

typedef struct{
    char d;
    int e;
    int f;
    A g;
}B;

printf("%lu\n%x,%x,%x,%x,%x,%x",sizeof(b),&b.d,&b.e,&b.f,&b.g.a,&b.g.b,&b.g.c);
40
efbff468,efbff46c,efbff470,efbff478,efbff480,efbff48
[d,*,*,*]
[e,e,e,e]
[f,f,f,f]
[a,*,*,*,*,*,*,*]
[b,b,b,b,b,b,b,b]
[c,c,c,c,*,*,*,*]

总结

结构体套结构体时,会以自己最大的成员变量作为依据,互不干扰

相关文章

  • c语言结构体对齐

    1.什么是字节对齐 结构体里面一般会按照某种规则去进行字节对齐默认规则如下:对齐是按照结构体中长度最长的变量来对齐...

  • 第一天,内存对齐

    一对齐规则: 1.非结构体类型 32位 4字节对齐,64位 8字节对齐 2.结构体类型 以结构体中,最大内存的整数...

  • 结构体 字节对齐的练习

    结构体 字节对齐的练习 分析结构体大小struct S1 ...

  • 二 结构体字节对齐

    原则 1.数据成员的对齐规则(以最大的类型字节为单位)。 结构体(struct)的数据成员,第一个数据成员放在of...

  • iOS 技术

    结构体的字节对齐和OC对象的字节对齐? instance(实例对象)、class(类对象)、meta-class(...

  • 结构体字节对齐

  • 结构体字节对齐

    结构体字节对齐 在定义结构体时,会发现结构体的大小有时是成员的字节大小相加,有时候又比成员的字节数相加大。这就涉及...

  • 结构体 struct 字节对齐

    每个字段都要放到内存地址编号(地址值) 自身的整数倍地址上去。 (这样理解也可以。 不用太纠结?,就可以不用看下...

  • iOS 一字节对齐

    一字节对齐的写法 #pragma pack(1) 结构体 #pragma pack() __attribute__...

  • 二、 字节对齐

    探索OC类的大小要先来说一下结构体,因为OC类底层都是以结构体的形式存在的。 1 结构体大小-字节对齐 我们先定义...

网友评论

      本文标题:二 结构体字节对齐

      本文链接:https://www.haomeiwen.com/subject/fgodektx.html