📄 changepage_opt.c
字号:
void ChangePage_OPT(int instr_addr, Page * page, int page_num, int *instruction_array, int cur)
{
int i, ptr,j,count;
int p[32] = {0};
j = 0;
count = 0;
ptr = 0;
/*首先找是否空闲的内存块,即page_id等于-1*/
for (i=0; i<page_num; i++)
{
if (page[i].page_id == -1)
{
page[i].page_id = instr_addr / 10;
page[i].used_count = 1;
page[i].last = cur;
return;
}
}
for (i=0; i<page_num; i++)
{ /*找出内存中每一页在后续的指令序列中再次出现的序号,若没有再次出现则序号记为INSTRUCTION_NUM,
把其中有最大值的页替换*/
for (j=cur; j<INSTRUCTION_NUM; j++)
{
if (page[i].page_id == (instruction_array[j] / 10))
{
p[i] = j;
count++;
break;
}
}
if (p[i] == 0)
{
p[i] = INSTRUCTION_NUM;
}
if (count == page_num)
break;
}
for (i=1; i<page_num; i++)
{
if (p[i] > p[ptr])
{
ptr = i;
}
}
page[ptr].page_id = instr_addr / 10;
page[ptr].used_count = 1;
page[ptr].last = cur;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -