【问题标题】:Implementing a write back fifo cache in C在 C 中实现回写 fifo 缓存
【发布时间】:2013-09-26 00:30:33
【问题描述】:

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

struct cache{

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

我做了一个指针数组,

struct cache **buffer[size];

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

非常感谢您的帮助。

【问题讨论】:

  • 为什么要使用双指针?
  • 你能解释一下如何将元素插入缓存

标签: c caching struct fifo


【解决方案1】:

在您显示的代码中,您分配的是指向指针的指针数组,而不是指向结构的指针,缓存的声明应为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 进行缓存,因为它具有在缓存已满时覆盖缓冲区中最旧条目的良好属性。希望这会有所帮助,祝你好运。

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 2021-03-05
    • 2012-04-17
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多