一、SideTables 和 weak_table 的关系

  • 在 runtime 中,有四个数据结构非常重要,分别是 SideTables,SideTable,weak_table_t 和 weak_entry_t。它们和对象的引用计数以及 weak 引用相关。
  • 在 runtime 内存空间中,SideTables 是一个 64 个元素长度 8 个元素长度的 hash 数组,里面存储了 SideTable。SideTables 的 hash 键值就是一个对象 obj 的 address。
  • 因此,一个 obj 对应了一个 SideTable,但是一个 SideTable,会对应多个obj,这是因为 SideTable 的数量只有 64 个,所以会有很多 obj 共用同一个SideTable。
  • 在一个 SideTable 中,又有两个成员,分别是:
 RefcountMap refcnts;        // 对象引用计数相关 mapweak_table_t weak_table;    // 对象弱引用相关 table
  • SideTable 的两个成员:refcents 是一个 hash map,其 key 是 obj 的地址,而 value,则是 obj 对象的引用计数。
  • weak_table 则存

iOS之深入解析内存管理散列表SideTables和弱引用表weak_table的底层原理相关推荐

  1. iOS之深入解析内存管理Tagged Pointer的底层原理

    一.前言 ① Tagged Pointer 概念 iOS 开发者对"引用计数"这个名词肯定不陌生,引用计数是苹果为了方便开发者管理内存而引入的一个概念.当引用计数为 0 时,对象就 ...

  2. iOS之深入解析内存管理retain与release的底层原理

    一.内存管理 ① 内存管理原理 iOS 的每个对象内部都保存了一个与之相关联的整数,称为引用计数器(auto reference count): 每当使用 alloc.new 或者 copy 创建一个 ...

  3. iOS之深入解析内存管理的引用计数retainCount的底层原理

    一.简介 ① 引用计数概念 OC 在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针. OC 在内存管理上采用了引用计数,它是一个简单而有效管理对象生命周期的方式. 在对象内部保存一个用来表 ...

  4. iOS之深入解析内存管理MRC与ARC机制

    一.内存管理 ① 什么是内存管理? 当我们编写程序的时候,会声明各种各样的变量,编写各种各样的代码,它们都会占用内存,但是并不是所有的代码和内存都是由我们进行释放. 内存分为 5 个区域:栈.堆.bs ...

  5. iOS之深入解析内存管理NSTimer的强引用问题

    一.强引用问题分析 现在有两个控制器 A.B,从 A push 到 B 控制器,在 B 控制器中有如下代码: self.timer = [NSTimer timerWithTimeInterval:1 ...

  6. 理解 iOS 和 macOS 的内存管理

    在 iOS 和 macOS 应用的开发中,无论是使用 Objective-C 还是使用 swift 都是通过引用计数策略来进行内存管理的,但是在日常开发中80%(这里,我瞎说的,8020 原则嘛?)以 ...

  7. 关于IOS的多任务以及内存管理

    看了很多FY为自己的可用内存是350MB还是380MB纠结.为了多优化出一点可用内存费脑筋.  IOS的任务管理和内存管理,跟windows是有很大差别的.很多FY习惯于用 windows的思维去看待 ...

  8. 散列表(也叫哈希表),

    google搜索到的头条:散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组 ...

  9. Redis源码解析——内存管理

    在<Redis源码解析--源码工程结构>一文中,我们介绍了Redis可能会根据环境或用户指定选择不同的内存管理库.在linux系统中,Redis默认使用jemalloc库.当然用户可以指定 ...

最新文章

  1. 二次开发photoshop_Photoshop 101:Web开发人员简介
  2. 数据库管理系统的组成和结构
  3. Linux 操作系统原理 — 进程与线程管理
  4. Linux离线时间设置(NTP)
  5. Redis 启动与授权
  6. GPS nmealib学习笔记
  7. 在Linux上使用AFL对Stagefright进行模糊测试
  8. mapreduce 算法_MapReduce算法–了解数据联接第1部分
  9. 笔记本html怎么插入图片,将图像嵌入到jupyter笔记本中并导出为HTML
  10. requirejs的用法(二)
  11. vuex 数据初始化问题
  12. 60-60-020-API-Kafka Java consumer动态修改topic订阅
  13. MakeDirZ.bat
  14. u盘文件或目录损坏且无法读取
  15. 15块rmb做一个语音识别控制的0.3W白光LED便利USB灯
  16. 线上连锁线下整合的连锁电商架构 打造店店互推人人分销模式
  17. 用python制作相册影集_影集制作APP哪个好?就用这些APP把照片做成相册!
  18. Altium Designer使用介绍和界面介绍
  19. python 如何实现依据依存关系构造邻接矩阵(有向图)
  20. unity 动态修改粒子特效

热门文章

  1. Windows Mobile和Wince下使用TinyXML进行Native C++的开发
  2. zoj3195 联通树上三个点的路径长
  3. phpstorm知识点
  4. xmanager 使用
  5. 线程对象Android 开发之多线程处理、Handler 详解
  6. STL源码学习----集合相关算法
  7. 在使用Asp.net制作网站的时候遇到的问题(二)
  8. 使用.net资源文件时候发生的问题
  9. 计算机常用的矢量图形文件,学位计算机考试2
  10. 思科交换机ping得通 traceroute不通_网络中经常接触的Ping 一次性教你弄懂如何检测三层网络...