Реализация кэша FIFO с обратной записью на C

Я пытаюсь внедрить кеш FIFO в программу C. У меня есть структура:

struct cache{

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

Я сделал массив указателей,

struct cache **buffer[size];

И после выделения этого кеша с указанным количеством блоков у меня возникают проблемы с поиском записи в кеше, в которой хранится указанный идентификатор блока (void *get_cache_block(int id) и возврат кешированного блока. Я не уверен, как перебирать мой массив указателя.Также вставка новой записи в кеш-функция, которая мне нужна помощь!

Заранее спасибо за помощь.


person user2817064    schedule 26.09.2013    source источник
comment
почему вы используете двойной указатель?   -  person aah134    schedule 26.09.2013
comment
вы можете объяснить, как вы вставляете элементы в кеш   -  person aah134    schedule 26.09.2013


Ответы (1)


В коде, который вы показали, вы выделяете массив указателей на указатели, а не указатели на структуры, объявление вашего кеша должно быть struct cache *buffer[size]. Поиск кеша с заданным идентификатором — это простой цикл 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 указывает на неизвестный тип.

Кроме того, вы, вероятно, захотите использовать кольцевой буфер для кэширования, так как он имеет хорошее свойство перезаписи самой старой записи в буфере при заполнении кэша. Надеюсь, это поможет и удачи.

person Dylan MacKenzie    schedule 26.09.2013