美文网首页ios内存
iOS中内存管理方案

iOS中内存管理方案

作者: 没八阿哥的程序 | 来源:发表于2018-10-30 16:51 被阅读138次

对于不同场景,系统提供的有不同的内存管理方案,大致有如下三种:

  • TaggedPointer (对于一些小对象,比如说NSNumber等采用此种方案)
  • NONPOINTER_ISA (64位架构下iOS应用程序)
  • 散列表 (散列表为复杂的数据结构,包含了引用计数表和弱引用表)

NONPOINTER_ISA

arm64架构下才用

0--31位

31 …… 4 3 2 1 0
0 …… 0 0 0 0 0
shiftcls shiftcls shiftcls shiftcls has_cxx_dtor has_assoc indexed
shiftcls shiftcls shiftcls 当前对象类对象的指针地址 当前对象是否有使用到C++方面的内容 当前对象是否有关联对象 0:这里存的是当前对象的类对象地址;1:除地址外还有内存管理方面数据

63--63位

63 …… 45 44 43 42 41…… 35…… 32
0 0 0 0 0 0
extra_rc has_sidetable_rc deallocting wealy_referenced magic shiftcls
储存内存管理相关 是否内存管理数据过大,过大或用sidetable储存 是否正在进行dealloc操作 是否有相应的弱引用指针 magic shiftcls

散列表方式

SideTables()结构


SideTables()结构

SideTables()实际上是个哈希表,可通过一个对象指针,来找到它的引用计数表或者弱引用表具体在哪个sideTable中。

SideTable结构

SideTable结构

多个sideTable,来提高效率,用分离锁来提高访问效率。

Spinlock_t 自旋锁
  • Spinlock_t是“忙等”的锁
  • 适用于轻量访问
RefcountMap 引用计数表

引用计数表是一个哈希表


引用计数表相关
size_t
引用计数的储存

获取真实的引用计数 需要先偏移两位

weak_table_t 弱引用表
弱引用表的哈希函数

相关文章

  • 4-1 内存管理

    1.内存布局 2.iOS内存管理方案 [isa指针保存了内存管理的信息] 2.iOS内存管理方案 [isa指针...

  • iOS 内存管理

    在开发中,内存管理是一个必要的技能,研究iOS 开发,我们通过内存布局、内存管理方案、数据结构、ARC/MRC、引...

  • iOS中内存管理方案

    对于不同场景,系统提供的有不同的内存管理方案,大致有如下三种: TaggedPointer (对于一些小对象,比如...

  • iOS开发 内存管理

    一、内存五大区 二、内存管理方案 iOS操作系统是针对不同场景,会提供不同的内存管理方案, TaggedPoint...

  • iOS ,内存分布、内存管理 、isa 指针,散列表(引用计数表

    iOS ,内存分布、内存管理 、isa 指针,散列表(引用计数表,弱引用表) 内存管理方案 1.taggedPoi...

  • iOS Runtime 数据结构

    ios内存布局 内存管理方案 数据结构 ARC & MRC 引用计数 弱引用 自动释放池 循环引用 ios内存布...

  • iOS备战之内存管理(二)

    内存管理方案 iOS操作系统是怎么管理内存的,本次就来详细的分析不同情况下使用的不同方案。 简要的说有三种内存管理...

  • OC中内存管理

    在OC中内存管理MRC手动内存管理和ARC自动内存管理,ARC是从iOS 4.0开始,在iOS 4.0之前...

  • iOS 内存管理 部分三

    主要讲解日常开发中定时器的选择; iOS 内存管理 部分一iOS 内存管理 部分二iOS 内存管理 部分三i...

  • iOS内存管理一:Tagged Pointer&引用计数

    从这篇文章开始探索iOS的内存管理,主要涉及的内容有1. 内存布局;2. 内存管理方案:Tagged Pointe...

网友评论

    本文标题:iOS中内存管理方案

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