我正在尝试将fifo缓存实现到C程序中。我有一个结构:
struct cache{
int blockid;
int used;
char content[SIZE];
};
我制作了一个指针数组,
struct cache **buffer[size];
在使用指定的块数量分配此缓存后,我找不到存储块id的缓存条目(void * get_cache_block(int id)并返回缓存块。我不知道如何迭代通过我的指针数组。 另外,在缓存中插入新条目是我需要帮助的功能!
谢谢你的帮助。
答案 0 :(得分:0)
在您显示的代码中,您正在分配指针数组,而不是指向结构的指针,缓存的声明应为struct cache *buffer[size]
。查找具有给定id的缓存是一个简单的for循环,其要点是:
int i;
struct cache *cur;
for (i = 0, cur = buffer[0]; i < size; cur = buffer[++i]) {
if (cur->blockid == id) {
break;
}
}
if (i < size) return cur;
else return 0;
函数get_cache_block应返回struct cache *
而不是void *
,因为void指针指示未知类型。
此外,您可能希望使用ring buffer进行缓存,因为它具有在缓存已满时覆盖缓冲区中最旧条目的良好属性。希望这有助于和好运。