1. cache_tの原理
- Classにはメソッドキャッシュcache_tがあり、これはハッシュテーブルを使用して呼び出されたメソッドをキャッシュするため、メソッドへのアクセス速度を向上させることができます。
struct cache_t {
struct bucket_t *_buckets;// 数组
mask_t _mask;//
mask_t _occupied;
public:
struct bucket_t *buckets();
mask_t mask();
mask_t occupied();
void incrementOccupied();
void setBucketsAndMask(struct bucket_t *newBuckets, mask_t newMask);
void initializeToEmpty();
mask_t capacity();
bool isConstantEmptyCache();
bool canBeFreed();
static size_t bytesForCapacity(uint32_t cap);
static struct bucket_t * endMarker(struct bucket_t *b, uint32_t cap);
void expand();
void reallocate(mask_t oldCapacity, mask_t newCapacity);
struct bucket_t * find(cache_key_t key, id receiver);
static void bad_cache(id receiver, SEL sel, Class isa) __attribute__((noreturn));
};
- Cache_tは構造体であり、キャッシュに相当します。キャッシュは、構造体に含まれるスペースのサイズに応じて、使用するバイト数を決定するメソッドです。(Cache_tは構造体へのポインターではなく、構造体です。Classは構造体へのポインターであり、8バイトを占めます)
struct cache_t {
struct bucket_t *_buckets; // 8
mask_t _mask; // 4
mask_t _occupied; // 4
}
つづく