美文网首页
4-2 内存管理方案

4-2 内存管理方案

作者: Rumbles | 来源:发表于2019-04-11 17:30 被阅读0次

    [引用计数相关] https://juejin.im/post/5b5577cae51d45191853426f
    [引用计数原理]http://www.cocoachina.com/ios/20151210/14636.html
    iOS系统是怎样对内存进行管理的?以及原理
    引用计数? 原理如下 wishing看上面的引用计数原理就够了
    1.TaggedPointer 是否支持 1表示支持就是nonpointer_isa
    2.NONPOINTER_ISA has_sidetable_rc 对象引用计数过大 就是要使用散列表的方式
    3.散列表

    NONPOINTER_ISA
    32位占用32个0也就是4个字节
    64位占用64个0也就是8个字节

    2.第一个字节indexed如何是1那么表示这是一个指针型isa 表示的是当前的对象的类对象的地址
    如果是1 那么存的不仅是对象的类对象的地址还有一些内存管理方面的数据

    占位数 名称 意义
    1 bit indexed 0 is raw isa, 1 is non-pointer isa.
    1 bit has_assoc 对象拥有或者曾经拥有一个相关的参考。对象没有关联的引用可以释放的更快。
    1 bit has_cxx_dtor 对象有一个 C++或者 ARC 的析构函数。没有析构函数的对象可以被释放的更快
    33 bit shiftcls 类指针的非零位 Class pointer's non-zero bits.
    9 bit magic 等于 0xd2。被调试器用来从没初始化的东西中区分真是的对象
    1 bit weakly_referenced 弱引用 对象正被或者曾经被一个自动释放的弱引用变量指向。没有被弱引用的对象能够释放的更快。
    1 bit deallocating 对象是否正在被释放
    1 bit has_sidetable_rc 对象引用计数过大 需要这个字节保存引用计数的相关内容 散列表
    19 bit extra_rc 对象的引用计数是extra_rc 值+1(举例,如果 extra_rc 是5,那么对象的真是引用计数是6)额外的引用计数

    散列表的方案是sideTables 是由多个sideTable组合而成的
    为什么用多张呢 因为用一张会导致效率问题
    使用分离所 可以吧表分开成 多张表 当a,b在不同的表里面时我们就可以进行并发操作
    提高效率

    怎样实现快速分流?
    sideTable本质是一张hash表

    相关文章

      网友评论

          本文标题:4-2 内存管理方案

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