Menerapkan cache fifo tulis kembali di C

Saya mencoba mengimplementasikan cache fifo ke dalam program C. Saya memiliki struktur:

struct cache{

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

Saya membuat serangkaian petunjuk,

struct cache **buffer[size];

Dan setelah mengalokasikan cache ini dengan jumlah blok yang ditentukan, saya mengalami kesulitan menemukan entri cache yang menyimpan id blok yang diberikan (void *get_cache_block(int id) dan mengembalikan blok yang di-cache. Saya tidak yakin bagaimana cara mengulanginya melalui array saya penunjuk Juga memasukkan entri baru ke dalam cache adalah fungsi yang saya perlukan bantuan!

Terima kasih sebelumnya atas bantuannya.


person user2817064    schedule 26.09.2013    source sumber
comment
mengapa Anda menggunakan penunjuk ganda?   -  person aah134    schedule 26.09.2013
comment
bisakah Anda menjelaskan bagaimana Anda memasukkan elemen ke dalam cache   -  person aah134    schedule 26.09.2013


Jawaban (1)


Dalam kode yang Anda tunjukkan, Anda mengalokasikan array pointer ke pointer, bukan pointer ke struct, deklarasi cache Anda harus struct cache *buffer[size]. Menemukan cache dengan id tertentu adalah perulangan for sederhana, yang intinya adalah:

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;

Fungsi get_cache_block harus mengembalikan struct cache * bukannya void * karena penunjuk kosong menunjukkan tipe yang tidak diketahui.

Selain itu, Anda mungkin ingin menggunakan ring buffer untuk melakukan cache, karena memiliki properti Nice untuk menimpa entri terlama di buffer ketika cache penuh. Semoga membantu dan selamat mencoba.

person Dylan MacKenzie    schedule 26.09.2013