前言
在runtime管理对象的引用计数和weak引用时,这四个数据结构非常重要,分别是SideTables、SideTable、weak_table_t和weak_entry_t。
它们之间的关系
在runtime内存空间中,
- SideTables是一个64个元素长度的hash数组,里面存储着64个SideTable。
- SideTables的hash键值就是一个对象obj的address:
- 一个obj对应一个SideTable
- 一个SideTable会对应多个obj,毕竟总共就64个SideTable,多个obj共用一个SideTable。
- SideTable中有两个成员分别是:
- RefcountMap refcnts; // 对象引用计数相关 map
- refcents是一个hash map,其key是obj的地址,而value,则是obj对象的引用计数
- weak_table_t weak_table; // 对象弱引用相关 table
- weak_table则存储了弱引用obj的指针的地址
- 其本质是一个以obj地址为key,弱引用obj的指针的地址作为value的hash表。
- hash表的节点类型是weak_entry_t。
- RefcountMap refcnts; // 对象引用计数相关 map
网友评论