alloc 的作用是分配内存,通过objc的源码我们能更清楚明白的了解在底层是如何做到的。
alloc流程(跟源码)
分配内存的过程
其中最主要的内容就是字节对齐
(x + WORD MASK) & ~WORD MASK;
if (size <16) size = 16;
总结就是按8的倍数增长,这么做的目的主要是提高读取速度(以空间换时间)
字节对齐原则
1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,
第一个数据成员放在offset为0的地方,以后每个数据成员存储的起
始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员
比如说是数组,结构体等)的整数倍开始(比如int为 4字节.则要从
4 的整数倍地址开始存储。
2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员
要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有
struct b,b里有char,int,double等元素,那b应该从8的整数倍
开始存储.)
3:收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部
最大成员的整数倍,不足的要补齐。
创建isa
通过isa使对象obj和cls建立关系
isa结构:
isa流程图:
总结
alloc做的事
1、开辟申请内存(分配内存)。
2、伴随初始化了isa(与cls建立联系)。