Я хотел использовать следующий код для очень простой замены страницы моего приложения. Счетчик для второго и третьего элементов buf_rec всегда имеет одинаковые значения, и я не могу понять, почему.
#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;
}
}