alloc流程

175 阅读1分钟

alloc 的作用是分配内存,通过objc的源码我们能更清楚明白的了解在底层是如何做到的。

alloc流程(跟源码)

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

分配内存的过程

image.png

image.png

image.png

其中最主要的内容就是字节对齐

image.png

(x + WORD MASK) & ~WORD MASK;
if (size <16) size = 16;
总结就是按8的倍数增长,这么做的目的主要是提高读取速度(以空间换时间)

字节对齐原则

1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,
第一个数据成员放在offset为0的地方,以后每个数据成员存储的起
始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员
比如说是数组,结构体等)的整数倍开始(比如int4字节.则要从
4 的整数倍地址开始存储。

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

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

创建isa

image.png

通过isa使对象obj和cls建立关系

image.png

isa结构:

image.png

isa流程图: isa流程图.png

总结

alloc做的事

    1、开辟申请内存(分配内存)。 
    2、伴随初始化了isa(与cls建立联系)。