การใช้แคช fifo การเขียนกลับใน C

ฉันกำลังพยายามใช้แคช fifo ในโปรแกรม C ฉันมีโครงสร้าง:

struct cache{

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

ฉันทำอาร์เรย์พอยน์เตอร์

struct cache **buffer[size];

และหลังจากจัดสรรแคชนี้ตามจำนวนบล็อกที่ระบุ ฉันประสบปัญหาในการค้นหารายการแคชที่เก็บรหัสบล็อกที่ให้ไว้ (เป็นโมฆะ *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] การค้นหาแคชด้วย id ที่กำหนดนั้นเป็นเรื่องง่ายสำหรับลูป โดยมีสาระสำคัญดังนี้:

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 สำหรับการแคช เนื่องจากมีคุณสมบัติที่ดี ของการเขียนทับรายการเก่าที่สุดในบัฟเฟอร์เมื่อแคชเต็ม หวังว่าจะช่วยได้และขอให้โชคดี

person Dylan MacKenzie    schedule 26.09.2013