gpt4 book ai didi

c++ - 为什么要在levelDB的缓存中使用while循环(函数Resize)?

转载 作者:行者123 更新时间:2023-11-28 02:24:08 25 4
gpt4 key购买 nike

当我看到levelDB缓存的实现时,address .我不明白为什么它在 for 循环中使用 while 循环(在函数 Resize 中),我认为它可以用 if 语句代替。我希望有人能帮助我。

 void Resize() {
uint32_t new_length = 4;
while (new_length < elems_) {
new_length *= 2;
}
LRUHandle** new_list = new LRUHandle*[new_length];
memset(new_list, 0, sizeof(new_list[0]) * new_length);
uint32_t count = 0;
for (uint32_t i = 0; i < length_; i++) {
LRUHandle* h = list_[i];
while (h != NULL) {
LRUHandle* next = h->next_hash;
uint32_t hash = h->hash;
LRUHandle** ptr = &new_list[hash & (new_length - 1)];
h->next_hash = *ptr;
*ptr = h;
h = next;
count++;
}
}
assert(elems_ == count);
delete[] list_;
list_ = new_list;
length_ = new_length;
}
};

最佳答案

list_ 显然是一个链表数组。 while (h != NULL),结合h = next(其中nexth->next_hash) , 意味着 while 循环将对每个链表的所有元素进行操作,仅在到达最后一个元素时停止(当 h 变为 NULL 时,或者因为列表为空或者因为元素的 next_hashNULL)。

如果将其替换为 if (h != NULL),它将只对链表的第一个元素起作用。

关于c++ - 为什么要在levelDB的缓存中使用while循环(函数Resize)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31322608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com