数据结构与算法iOS底层探究九点 . 罐注

iOS散列表缓存窥探

2018-08-20  本文已影响57人  cyh老崔

1.

1

2. 散列表(哈希表)是以空间换时间.

刚开始为cache_t分配一定的内存, 如10, 当内存不够用时, 内存扩大2倍, 依次类推

3. 表格大概如下:

2

4.iOS arm64 散列表存储原理:

5. 对应的查找步骤:

6. 为什么按位&_mask?

按位与 可保证得到的值 <= _mask, 这样就不会超出分配的空间.

注: 有的系统是求余 %, 如java, 这样也能保证 <= _mask

7. 为什么有 -1 的算法, 也是因为按位与, 因为不同的值 & _mask, 可能结果相同. 如果已经被占了, 就-1:

3

8. 如果空间超出原来的_mask, 则 _mask *= 2.

每一次_mask 扩容, 散列表清空, 只留下一个方法占用, 是导致它扩容的方法.

4 5

9.打印散列表:

9.1 9.2

10. 测试 & _mask 得到方法:

10.1
打印:
10.2

注: selector 转化成数字类型才能 & , 所以强转成 long long.

11. 将地址 转化 成方法名:

11
上一篇 下一篇

猜你喜欢

热点阅读