私のアプリケーションのための非常に単純なlruページ置換のために次のコードを使いたかったのです。 カウンタの2番目と3番目の要素buf_recは常に同じ値を持っていますが、その理由を見ることができませんでした。ここ次のlruコードの論理エラーは何ですか
#include<stdio.h>
#include<conio.h>
typedef struct search_cache_rec
{
int index;
int counter;
}search_cache_rec;
search_cache_rec buf_rec[3];
void inint_buf()
{
for(int m=0;m<3;m++)
{
buf_rec[m].index=-1;
buf_rec[m].counter=100;
}
}
int i,j,fs[3];
int ind,k,l,flag1=0,flag2=0,pf=0,frsize=3;
bool search_cache(int *id)
{
bool status=false;
flag1=0,flag2=0;
for(i=0;i<3;i++)
{
if(buf_rec[i].index==*id)
{
flag1=1;
flag2=1;
*tanker_id=i;
buf_rec[i].counter+=2;
for(i=0;i<3;i++)
{
//if(buf_rec[i].counter>-1)
buf_rec[i].counter--;
}
return true;
}
}
if(flag1==0)
{
for(i=0;i<3;i++)
{
if(buf_rec[i].index==-1)
{
buf_rec[i].index=*id;
flag2=1;
*tanker_id=i;
buf_rec[i].counter+=2;
for(i=0;i<3;i++)
{
//if(buf_rec[i].counter>-1)
buf_rec[i].counter--;
}
return false;
}
}
}
if(flag2==0)
{
int min=buf_rec[0].counter;
for(i=0;i<3;i++)
{
if(min>buf_rec[i].counter)
{
min=buf_rec[i].counter;
ind=i;
}
}
buf_rec[ind].index=*id;
buf_rec[i].counter+=2;
*id=i;
for(i=0;i<3;i++)
{
//if(buf_rec[i].counter>-1)
buf_rec[i].counter--;
}
return false;
}
}
void display()
{
int i;
printf("\n");
for(i=0;i<3;i++)
printf("\t%d",buf_rec[i].index);
}
は、私はそれを使用する方法です
#include"lru.h"
#include<string>
#include<iostream>
void main()
{
int num;
inint_buf();
display();
std::cout<<"\nEnter a num\n";
std::cin>>num;
while(num!=-1)
{
search_cache(&num);
display();
std::cout<<"\nEnter a num\n";
std::cin>>num;
}
}
これは多くのコードです。コードレビューの方が良いかもしれません。 –
@ MarkB:問題を見つけるのが簡単になると思ったのです – John
なぜグローバル変数が非常に多いのですか?また、変数に意味のある名前を付けてコメントを追加することも考えてください。 –