OC 对象的底层本质2

2020-04-28  本文已影响0人  化二缺
image.png

因为内存对齐原则 ,内存大小必然是 8的倍数 所以是24个字节

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

sizeof(struct MJPerson_IMPL);//24  这个是结构体只需要24个字节就能放下

class_getInstanceSize([MJPerson class]) ; //24 是在计算对象多大

malloc_size((__bridge const void *)(p)) ; //32  为了内存访问方便和速度是这么分配 

Buckets sized.png

iOS 分配OC对象内存都是16的倍数 所以malloc_size 是32

linux 内存管理用的是GNU

  • GNU is not unix
  • 开源组织
  • www.gnu.org
  • i386 架构下的内存对齐也是 16
  • 其他架构下的内存对齐是 需要宏定义计算的 一般也是16

sizeof 和 class_getInstanceSize 区别

sizeof(struct MJPerson_IMPL);
//是运算符  在编译时候就会变成确定的数值

class_getInstanceSize([MJPerson class]) ; 
//是函数  运行过程中计算数值 
上一篇 下一篇

猜你喜欢

热点阅读