iOS_内存对齐原则

内存对齐原则

1、数据成员对齐规则:结构体(struct)或联合体(union)的数据成员,第一个数据成员放在 offset 为 0 的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说数组、结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存储)
2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储(strcut a里存有 struct bb里有结构体charint 等,那么b应该从8的整数倍开始存储)
3、结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的需要补齐

对象申请内存大小 VS 系统开辟内存大小

Person *p = [[Person alloc] init];

1、对象申请内存大小class_getInstanceSize([p class]),对象在申请内存时,系统会进行内存优化,二进制重排,并根据内存对齐原则(以8字节进行对齐)进行内存的申请
2、系统开辟内存大小malloc_size((__bridge const void *)(p)),系统在进行内存的开辟时,会根据对象申请的内存大小,并以16字节进行内存对齐来进行内存的开辟

猜你喜欢

转载自blog.csdn.net/FlyingKuiKui/article/details/120686522