美文网首页
iOS 底层探索03-内存对齐

iOS 底层探索03-内存对齐

作者: hmengy | 来源:发表于2020-09-19 23:49 被阅读0次

iOS 底层探索02-alloc/init/new 探索提到了alloc 流程中涉及的一个重要方法:instanceSize.

追踪发现最终实现的是16字节对齐,今天来探索下内存对齐.

为什么要内存对齐

我们先来看来定义两个结构体,

通过 sizeof方法打印得到他们的大小

两个结构体里的属性都一样,可结构体的大小不一样,体现了结构体的内存对齐规则。 

在结构体中,从结构体的首地址开始,假设地址从0开始。 

对结构体testStruct1来说,double a占8个字节,占从0~7的字节,char b是char类型占1个字节,占第8个的字节,int c占4个字节,占12~15位(b 结束是第9位),short d占两个字节,占16~17;

so 对结构体testStruct1:内部需要的大小为:17,最大属性:8,那么结构体字节为最大属性整数倍,就是24字节;

对结构体testStruct2来说,double a占8个字节,占从0~7的字节,int b占4个字节,占8~11位,char c是char类型占1个字节,占第12个的字节,,short d占两个字节,占14~15字节.

so 对结构体testStruct2:内部需要的大小为:15,最大属性:8,那么结构体字节为最大属性整数倍,就是16字节;

内存对齐规则是按照成员的声明顺序,依次安排内存,其偏移量为成员大小的整数倍,0看做任何成员的整数倍,最后结构体的大小为最大成员的整数倍。

这里附上各数据类型大小表

内存对齐的原则

1:数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第⼀个数据成员放在offset为0的地⽅,以后每个数据成员存储的起始位置要从该成员⼤⼩或者成员的⼦成员⼤⼩(只要该成员有⼦成员,⽐如说是数组,结构体等)的整数倍开始(⽐如int为4字节,则要从4的整数倍地址开始存储。 min(当前开始的位置m n) m = 9 n = 4  9 10 11 12 

2:结构体作为成员:如果⼀个结构⾥有某些结构体成员,则结构体成员要从其内部最⼤元素⼤⼩的整数倍地址开始存储.(struct a⾥存有struct b,b⾥有char,int ,double等元素,那b应该从8的整数倍开始存储.)

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

相关文章

  • iOS底层探索-目录

    iOS底层探索001-alloc&init&new源码分析 iOS底层探索002-内存对齐 iOS底层探索003-...

  • iOS 底层探索03-内存对齐

    在iOS 底层探索02-alloc/init/new 探索提到了alloc 流程中涉及的一个重要方法:instan...

  • IOS底层探索-内存对齐

    这篇文章我们来讲讲关于内存对齐的一些趣事 为什么要内存对齐 平台原因(移植原因):不是所有的硬件平台都能访问任意地...

  • OC对象底层探索 — alloc创建对象

    用于记录iOS底层学习,以备后续回顾 OC对象底层探索alloc创建对象由字节对齐到对象内存大小探索isa的初始化...

  • OC对象底层探索 — 由字节对齐到对象内存的分配

    用于记录iOS底层学习,以备后续回顾 OC对象底层探索alloc创建对象由字节对齐到对象内存大小探索isa的初始化...

  • OC对象底层探索 — isa的初始化和指向分析

    用于记录iOS底层学习,以备后续回顾 OC对象底层探索alloc创建对象由字节对齐到对象内存大小探索isa的初始化...

  • iOS内存对齐

    这篇文章我们来探索一下iOS内存对齐的原理,在探索完内存对齐原理之后,你就会明白内存对齐的好处。 在讲述内存对齐时...

  • iOS底层探索之-内存对齐

    为什么需要内存对齐? 内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上 平...

  • iOS底层探索--Struct内存对齐

    知识点须知 C和OC各数据类型在32位和64位CPU中的占用的字节大小列表: COC32位64位boolBOOL(...

  • iOS底层探索-calloc

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

网友评论

      本文标题:iOS 底层探索03-内存对齐

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