在C中实现写回fifo缓存

时间:2013-09-26 00:30:33

标签: c caching struct fifo

我正在尝试将fifo缓存实现到C程序中。我有一个结构:

struct cache{

int blockid;
int used;
char content[SIZE];
};

我制作了一个指针数组,

struct cache **buffer[size];

在使用指定的块数量分配此缓存后,我找不到存储块id的缓存条目(void * get_cache_block(int id)并返回缓存块。我不知道如何迭代通过我的指针数组。 另外,在缓存中插入新条目是我需要帮助的功能!

谢谢你的帮助。

1 个答案:

答案 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进行缓存,因为它具有在缓存已满时覆盖缓冲区中最旧条目的良好属性。希望这有助于和好运。