0

fifo キャッシュを C プログラムに実装しようとしています。私は構造体を持っています:

struct cache{

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

ポインターの配列を作成しましたが、

struct cache **buffer[size];

そして、指定されたブロックの量でこのキャッシュを割り当てた後、指定されたブロック ID (void *get_cache_block(int id)) を格納するキャッシュ エントリを見つけて、キャッシュされたブロックを返すのに問題があります。配列を反復処理する方法がわかりません。また、キャッシュに新しいエントリを挿入することは、私が助けを必要としている機能です!

助けてくれてありがとう。

4

1 に答える 1

0

あなたが示したコードでは、構造体へのポインターではなく、ポインターへのポインターの配列を割り当てています。キャッシュの宣言は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 は astruct cache *ではなくa を返す必要がvoid *あります。これは、void ポインターが不明な型を示しているためです。

さらに、キャッシュがいっぱいになるとバッファ内の最も古いエントリを上書きするという優れた特性があるため、おそらくキャッシュにリング バッファを使用することをお勧めします。うまくいけば、それが役に立ち、幸運を祈ります。

于 2013-09-26T01:20:58.597 に答える