栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

小码哥学习笔记:Runtime-isa位域详解【02】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小码哥学习笔记:Runtime-isa位域详解【02】

要想学习Runtime,首先要了解它底层的一些常用数据结构,比如isa指针:

1、在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta-Class对象的内存地址
2、从arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,还使用位域来存储更多的信息

isa指针共用体(以下均已64架构分析)结构:

位域说明:

  • nonpointer:
    0,代表普通的指针,存储着Class、Meta-Class对象的内存地址
    1,代表优化过,使用位域存储更多的信息
  • has_assoc:
    是否有设置过关联对象,如果没有,释放时会更快
  • has_cxx_dtor:
    是否有C++的析构函数(.cxx_destruct),如果没有,释放时会更快
  • shiftcls:
    存储着Class、Meta-Class对象的内存地址信息
  • magic:
    用于在调试时分辨对象是否未完成初始化
  • weakly_referenced:
    是否有被弱引用指向过,如果没有,释放时会更快
  • deallocating:
    对象是否正在释放
  • extra_rc:
    里面存储的值是引用计数器减1
  • has_sidetable_rc:
    引用计数器是否过大无法存储在isa中
    如果为1,那么引用计数会存储在一个叫SideTable的类的属性中
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892354.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号