cache_t

作者: zziazm | 来源:发表于2023-02-21 18:38 被阅读0次

cache_t可以看做一个哈希表,以sel作为key,查找方法的imp。

struct cache_t {
    struct bucket_t *_buckets;
    mask_t _mask;
    mask_t _occupied;
     ...
}

struct bucket_t *_buckets是一个通过calloc函数得到的一块连续的内存,里面存储的是bucket_t的结构体,_buckets可以像数组一样通过下标index存取值,当存储的bucket_t超过限制时,会通过expand()函数进行扩容。

struct bucket_t {
    MethodCacheIMP _imp;
    cache_key_t _key;
...
};

bucket_t里面包含了我们要找的方法imp。
cache会通过一个哈希算法由sel得到一个index,然后从数组_buckets中取出对应的bucket_t得到imp。
哈希算法的实现:

static inline mask_t cache_hash(cache_key_t key, mask_t mask) 
{
    return (mask_t)(key & mask);
}

对于有可能出现的哈希冲突,使用了再次哈希的方式来解决:

bucket_t * cache_t::find(cache_key_t k, id receiver)
{
    
    bucket_t *b = buckets();
    mask_t m = mask();
    mask_t begin = cache_hash(k, m);
    mask_t i = begin;
    do {
        if (b[i].key() == 0  ||  b[i].key() == k) {
            return &b[i];
        }
    } while ((i = cache_next(i, m)) != begin);
}

cache_next时出现冲突时再次hash得到的下标index。

相关文章

  • cache_t分析

    cache_t分析 cache_t的作用:用于快速查找方法 cache_t的特点:是可增量扩展的hash表结构ha...

  • objc_class中的cache_t分析

    本文探索的的主要是两点 1、cache_t的结构 2、cache_t里存储的哪些 cache_t结构分析 打开源码...

  • 七、cache_t 分析

    主要内容:cache_t的底层原理:分析cache_t缓存的内家及怎样缓存的。一、分析cache_t主要存储的是什...

  • cache_t原理分析

    类结构中的cache_t: cache_t的结构体:bucketsMask 、_mask_unused、_flag...

  • 类(三)-- cache_t分析

    类(一)-- 底层探索类(二)-- method归属类(三)-- cache_t分析 cache_t作用 用来缓存...

  • 方法缓存Cache_t分析

    缓存Cache_t bucket_t cache_t 缓存的是 方法 method_t: 缓存流程 缓存的入口是:...

  • iOS cache_t结构分析

    cache_t源码结构精简后的cache_t源码如下: 可以看到有个重要的函数void incrementOccu...

  • OC类底层结构-方法缓存之cache_t

    什么是cache_t cache_t是负责OC类中的结构体objc_class[https://www.jians...

  • 探索Cache_t

    Cache_t 的整体分析 Cache_t的源码 在objc/objc-runtime-new源码下查找结构体ca...

  • cache_t结构探一探

    接上文类的结构分析 一.cache_t结构 1.cache_t结构 cache是cache_t类型,那么cache...

网友评论

      本文标题:cache_t

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