散列表的内存管理方案,在源码中是通过SideTables()
结构来实现的, SideTables()
中有很多SideTable
数据结构, SideTables()
实际是一个哈希表,即可以通过一个对象指针来找到对象的引用计数表或弱引用表在哪一个具体的SideTable
中。
SideTable
数据结构中,包括自旋锁、引用计数表RefcountMap和弱引用表weak_table_t等数据结构。

问题:苹果为什么设计出多个
SideTable
组成一个SideTables()
,而不是直接设计一个SideTable
如果要设计一个
SideTable
而不是多个,如果在多线程中进行表的访问操作,为了访问安全需要进行加锁处理,此时就会存在效率问题,因此设计多个SideTable
,操作时对每个表分别进行加锁,然后访问操作,可以同时进行,提高了访问效率
问题:系统是如何定位到对应的引用计数表或弱引用表的
SideTables()
实际是一个哈希表,系统通过一个哈希算法(哈希查找)来定位的,具体就是通过对象的内存地址与SideTables
数组的个数进行取余运算(此函数是均匀散列函数),获取到SideTable
在SideTables
中的索引位置
网友评论