# IterKey - 用于高效地存储 key。它可以: - 用户可以将 key 拷贝进去,或者让它指向一个 unowned 地址 - 对于拷贝的小 key,使用了一个小的 inline buffer 来减少内存分配 - 跟踪了 key 的类型(user or internal),并允许相互转换。 ## 核心成员 - **`key_`**:`const char *`,指向 key 的指针,可以是内部buffer,也可以是外部地址 - **`key_size_`**:`size_t`,key 的大小 - **`is_user_key_`**:`bool`,是否为 user key,false 表示为 internal key。 - 初始值为 true。 - **`space_`**:`char[30]`,inlined 小 key 存储buffer - **`buf_`**:`char *`,内部存储 key 的 buffer(copy case),可以指向 `space_`(初始值) 或者堆上分配 - **`buf_size_`**:`buf_`的大小,可以是 `space_` 的大小(初始值)或者堆上分配的大小。 ## GetUserKey() - 如果存储的是 user key,直接返回 `Slice(key_, key_size_)` - 否则为 internal key,返回 `Slice(key_, key_size_ - kNumInternalBytes)` ## IsKeyPinned() - key 是否由外部存储 - 返回 `key_ != buf_` ## TrimAppend - 入参: - **`shared_len`**:`size_t` - **`non_shared_data`**:`const char *` - **`non_shared_len`**:`size_t` - 将 `non_shared_data`追加到 `shared_len` 之后,最后总长度为 `shared_len + non_shared_len` ---------- # TODO - [ ] Thread Pool - [ ] Arena - [ ] FaultInjectionTestFS