首先说明为什么内存里面要有对齐这个说法,因为数据成员内存分布,如果参差不齐,如卵石铺路的话,就像这种
属性对齐
1 属性内存规则为8位对齐,但并不是每个属性都占用8位,例如NSString->8字节,int 4字节 char 1字节
2 第一个属性是以0的第一个位置为开端,此后每个属性成员的起始位置都要从本身大小的整数倍开始,例如:int 4字节,就要从4的整数倍开始存储,NSString为8字节,就要从8的整数倍开始存储
3 假如属性本身又包含其他成员,就要从成员的内部的元素最大的整数倍开始存储
4 数据总大小就是sizeof 的结果,必须是内部最大成员的整数倍
例如:
LGTeacher 该类,有name age两个成员
改数据对齐情况
如果说属性成员比较多呢 举例:LGTeacher有成员: NString *name; Int age; char sym; long heiht; 那么他的对齐方式如图所示
对象对齐规则
对象对齐方式为16位对齐,对象的大小都是以16的整数倍对齐,不够整数倍当然也是补齐 假如我的对象结构是这样的
那么如果LGTeacher有成员: NString *name; Int age; char sym; long heiht; 那么LGTeacher的对齐方式如图所示
以上就是简单一些内存对齐规则,有何不足之处,路过大神请多指教