美文网首页
内存管理-引用计数的存储

内存管理-引用计数的存储

作者: 越天高 | 来源:发表于2020-11-13 20:06 被阅读0次

当一个对象创建出来的时候,他的引用计数是1,当使用这个对象的时候要对这个对象的引用计数+1,使用结束之后要进行-1;
那么这个对象的引用计数,一开始放在什么地方
在64bit中,引用计数可以直接存储在优化过的isa指针中,也可能存储在SideTable类中
从arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,还使用位域来存储更多的信息


isa结构
  • extra_rc
    里面存储的值是引用计数器减1
  • has_sidetable_rc
    引用计数器是否过大无法存储在isa中
    如果为1,那么引用计数会存储在一个叫SideTable的类的属性中
struct SideTable {
    spinlock_t slock;
    RefcountMap refcnts;//这里就是引用计数
    weak_table_t weak_table;
}

RefcountMap refcnts这是一个散列表的结构,根据一个key可以去找到一个value。里面存放着引用计数
我们可以去源码文件中查看,他是如何获得引用计数的
NSObject.mm->函数returnCount->C++函数rootReturnCount 他会判断isTaggedPointer 不是的在判断是不是一个优化过的isa指针,如果是就根据我们上面的描述,拿到对应位置的数据extra_rc + 1;如果发现has_sidetable_rc有值那么引用计数就不是放到isa中,那么就是去sidetable寻找引用计数,这个里面会根据穿进去一个值this来取对应的引用计数

相关文章

  • Obj-C高级编程--内存管理

    自动引用计数 自动引用计数:指内存管理中对引用采取自动计数的技术。 内存管理/引用计数 持有对象引起引用计数加...

  • OC内存管理--引用计数器

    原文链接OC内存管理--引用计数器 引用计数的存储策略 有些对象如果支持使用TaggedPointer,苹果会直接...

  • python内存管理

    python内存管理是通过引用计数来实现的。当对象的引用计数为0时,会被gc回收。 为了探索对象在内存的存储,我们...

  • 内存管理与自动引用计数—第一日

    自动引用计数 1.1 什么是自动引用计数 内存管理中对引用采用自动计数的计数 1.2 内存管理/引用计数 这一张举...

  • Effective Objective-C 2.0笔记(四)

    第五章 内存管理 第29条:理解引用计数 OC使用引用计数管理内存,引用计数机制通过递增递减的计数器来管理内存。对...

  • iOS内存管理1:引用计数

    iOS内存管理1:引用计数 引用计数: Objecttive-C使用引用计数来进行内存管理。然后,引用计数其实是不...

  • 内存管理-引用计数的存储

    在iOS中,内存管理是通过引用计数来管理的,那么对象的引用计数值存储在哪里?在Runtime(一)中介绍了isa指...

  • EffectiveObjective-C2.0 笔记 - 第五部

    5 内存管理 5.1 理解引用计数 1、引用计数 Objective-C 语言使用引用计数来管理内存,每个对象都有...

  • Objective-C高级编程之内存管理篇

    iOS的内存管理是采用引用计数的方式,引用计数分为手动引用计数和自动引用计数(ARC)。前者要求开发者手动管理内存...

  • iOS内存管理

    一.内存管理 /引用计数 Objective-C 中的内存管理,也就是引用计数 1.1内存管理的思考方式 自己生成...

网友评论

      本文标题:内存管理-引用计数的存储

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