page contents

isa指针里面储存了哪些信息?

王昭君 发布于 2022-10-06 10:00
阅读 733
收藏 0
分类:操作系统
4335
轩辕小不懂
轩辕小不懂

现在的64位系统(arm64架构)中,苹果对isa做了优化,里面除了存储一个地址外还存储了很多其他信息。一个指针占8个字节,也就是64位,苹果只用了其中的33位来存储地址,其余31位用来存储其他信息。

nonpointer: (isa的第0位)表示是否对 isa指针开启指针优化。O∶纯isa指针,1:优化过的isa。

has_assoc: (isa的第1位)记录这个对象是否是关联对象。has_cxx_dtor: (isa的第2位)记录是否有c++的析构函数。shiftcls: (isa的第3-35位,共占33位)记录对象的地址值。

magic: (isa的第36-41位,共占6位)用于在调试时分辨对象是否完成初始化。

weakly_referenced: (isa的第42位)用于记录该对象是否被弱引用或曾经被弱引用过。deallocating: (isa的第43位)标志对象是否正在释放内存。

has_sidetable_rc: (isa的第44位)用于标记是否有扩展的引用计数。当一个对象的引用计数比较少时,其引用计数就记录在isa中,当引用计数大于某个值时就会采用sideTable来协助存储引用计数。

extra_rc: (isa的第45-63位,共占19位),用来记录该对象的引用计数值-1。这里总共是19位,如果引用计数很大,19位存不下的话就会采用sideTable来协助存储。

请先 登录 后评论