OC对象内存分布

1.NSObject对象内存分布多少?

首先看NSObject的定义(就有一个isa,其他都是函数 函数是个method list中 不属于此对象内存分布,函数是一份,而变量是针对对象的不同值):

由此可知是个结构体指针, 指针占8个字节(也就是结构体中的isa需要8字节空间),但是系统为了cpu读取速度快也有内存填空对齐按照16字节倍数对齐,也就是最后系统分布的内存是16字节

2.看下Person内存分布是多少?

首先看下Person的实现

实用内存8+4+1+8=21, 根据结构体按照最大size倍数的内存对齐,也就是8*3=24最接近21字节

也就是Person实现所需要24字节就够了。

但是下一步内存对齐按照16字节倍数,16*2=32字节 接近24字节

⚠️注意: 在struct Person_IMPL中int age 直接写成@property (nonatomic,assign) int age;? 它一样会生成_age成员变量

查看cpp源码:

如sizeof(Int)这是在编译时期已经获取

小结:

  • 结构体内存是按照最大size倍数的内存对齐,首个成员地址就是结构体内存地址(类似Array)
  • 为了cpu读取速度内存对齐按照16字节倍数

发表回复

电子邮件地址不会被公开。 必填项已用*标注

Protected with IP Blacklist CloudIP Blacklist Cloud