美文网首页
2020-09-08 结构体内存对齐

2020-09-08 结构体内存对齐

作者: 北京_小海 | 来源:发表于2020-09-08 10:23 被阅读0次

今天我们来说说结构体内存对齐,废话少说~~

先上代码和输出结果:



代码解析:

1.普通结构体

struct MyStruct1 {

    double a;  // 占8字节   起始位置(0-7)

    char b;    // 占1字节  起始位置(8)

    int c;      // 占4字节 因9不是4的整数倍 所以 起始位置为(12 13 14 15)

    short d;    // 占2字节  起始位置为 (16 17)

}struct1;

内部大小:18  (0-17)

最大成员属性:8 

结构体总大小:  24  因为必须是最大成员8的整数倍 18不足 补齐后是 24 

2.嵌套结构体

structMYStruct2 {

    doublea;  //占8字节  (0-7)

    intb;      //占4字节  (8 9 10 11)

    charc;    //占1字节  (12)

    shortd;    //占2字节 因13不是2的整数倍 所以起始位置(14 15) 

    struct  MYStruct1 str1; //占24字节  16正好是最大成员8的整数倍所以 起始位置(16 ... 39)

}mystruct2;

内部大小:40  (0-39)

最大成员属性:8 

结构体总大小:  40  因为必须是最大成员8的整数倍 不用补齐 正好~~


总结:结构体内存对齐原则:

1.第⼀个数据成员放在offset为0的地方

2.后续的成员起始位置要从该成员大小的整数倍开始,若该成员是结构体或者数组等,则从其内部最⼤元素⼤⼩的整数倍地址开始存储

3.结构体的总⼤⼩,也就是sizeof的结果,.必须是其内部最⼤成员的整数倍.不⾜的要补⻬

相关文章

  • 结构体

    1.结构体 2.结构体的内存对齐模式 编译器在编译一个结构的时候采用内存对齐模式,结构体总是以最大的成员最为对齐单...

  • ndk-基础知识

    数组和指针,数组指针,指针数组 结构体 内存对齐 内存对齐 结构体大小 S5DUD10BN083MHEJEX7TP...

  • 内存对齐详解

    1、什么是内存对齐假设我们声明两个变量: 2、结构体内存对齐规则 结构体所占用的内存与其成员在结构体中的声明顺序有...

  • iOS原理探索02-- 内存对齐

    结构体内存对齐 我们首先定义两个结构体,分别计算他们的内存大小,并讨论内存对齐原理 从两个结构体来看两者没啥大的区...

  • iOS 内存对齐

    一、结构体内存对齐 1.1 结构体内存对齐三大原则 数据成员对⻬规则结构体(struct)或联合体(union)的...

  • 从结构体内存对齐到OC对象内存对齐

    1、结构体内存对齐 结构体对齐规则:1:数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,...

  • iOS 内存对齐:结构体继承和结构体作为另一个结构体成员变量情况

    内存对齐规则就不赘述了,这里讨论下继承和结构体作为另一个结构体成员变量的情况下,结构体内如何进行内存对齐。以下测试...

  • 结构体

    结构体有名定义 无名定义 结构体嵌套定义 结构体内存对齐 结构体成员初始化 结构体变量引用 结构体的有名定义:直白...

  • 第一天,内存对齐

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

  • iOS 结构体内存对齐浅析

    什么是内存对齐 内存对齐是一种在计算机内存中排列数据、访问数据的一种方式。它包含基本数据对齐和结构体数据对齐 。 ...

网友评论

      本文标题:2020-09-08 结构体内存对齐

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