美文网首页
OC 对象的底层本质2

OC 对象的底层本质2

作者: 化二缺 | 来源:发表于2020-04-28 11:15 被阅读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]) ; 
//是函数  运行过程中计算数值 

相关文章

网友评论

      本文标题:OC 对象的底层本质2

      本文链接:https://www.haomeiwen.com/subject/uuamwhtx.html