2013-09-26 3 views
0

Я пытаюсь реализовать кеш fifo в C-программе. У меня есть на структуру:Реализация кэша обратной записи в C

struct cache{ 

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

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

struct cache **buffer[size]; 

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

Спасибо заранее f или помощь.

+0

Почему вы используете двойной указатель? – aah134

+0

вы можете объяснить, как вы вставляете элементы в кеш – aah134

ответ

0

В коде, который вы указали, вы выделяете массив указателей указателям, а не указателям на структуры, объявление вашего кеша должно быть struct cache *buffer[size]. Нахождение кэш с заданным идентификатором является простой цикл, суть которого:

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 * потому указатель недействительным указывает неизвестный тип.

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

+0

большое спасибо! Очень полезно! – user2817064

Смежные вопросы