美文网首页iOS底层原理
iOS结构体内存对齐原则初探

iOS结构体内存对齐原则初探

作者: 何必太轻浮 | 来源:发表于2020-09-09 18:44 被阅读0次

为什么OC对象在开辟内存的时候会有内存对齐原则,在对象申请内存的时候是16字节对齐的,在真正开辟所需要的内存时时8字节对齐的,为什么会有这些对齐呢,主要是为了容错,那具体怎么看对象是怎么对齐的呢,我们可以通过研究struct结构体的内存对齐原则来稍微了解下(ps:对象的内存对齐是对结构体内存对齐的优化)

1.数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要

从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,
结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存
储。

文字看起来很麻烦,直接上代码

struct MCStruct1 {
    char a; //1  [0]
    short b; //2 1 [2 3]
    double c;//8 4 5 6 7 [8 9 10 11 12 13 14 15]
    char d; //16  [16]
}mcstaruct1; //一共占用17个字节,但是要是里面最大的属性字节大小的倍数,所以是8的倍数,为24个字节

开始运行,结果如图,跟我们预计是是一样的


pic0

那如果结构体内嵌结构体呢,那就会遵循第二个结构体内存对齐原则

2.结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从

其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b
里有char,int ,double等元素,那b应该从8的整数倍开始存储.)

直接上代码


struct MCStruct1 {
    char a; //1  [0]
    short b; //2 1 [2 3]
    double c;//8 4 5 6 7 [8 9 10 11 12 13 14 15]
    char d; //16  [16]
}mcstaruct1; //一共占用17个字节,但是要是里面最大的属性字节大小的倍数,所以是8的倍数,为24个字节

struct MCStruct2 {
    char a; //1  [0]
    short b; //2 1 [2 3]
    double c;//8 4 5 6 7 [8 9 10 11 12 13 14 15]
    struct MCStruct1 d;//24 字节
}mcstaruct2;//16 + 24 = 40字节 刚好是里面结构内结构体最大属性字节数8的倍数,所以大小为40字节

开始运行,结果如下


pic1

OC对象的内存对齐是类似于结构体的内存对齐的,只是更优于结构体的内存对齐。

相关文章

  • iOS 内存对齐

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

  • iOS结构体内存对齐原则初探

    为什么OC对象在开辟内存的时候会有内存对齐原则,在对象申请内存的时候是16字节对齐的,在真正开辟所需要的内存时时8...

  • iOS-内存对齐

    先上个图,待会计算内存时会用到。 hxdm,已知iOS对象的本质是结构体,所以探索内存对齐当然是从结构体开始啦。来...

  • 结构体

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

  • ndk-基础知识

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

  • 内存对齐详解

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

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

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

  • iOS底层探究 - 内存对齐

    目录1:内存对齐的原因2:内存对齐的规则3:结构体内存分配演练以及在iOS中对象成员的内存分配探索 一 :内存对齐...

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

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

  • iOS底层探索-calloc

    一、calloc底层探索 1.1、内存对齐原则 a:数据成员对齐规则:结构(struct)(或联合(union))...

网友评论

    本文标题:iOS结构体内存对齐原则初探

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