📄 recycle.c
字号:
void recycle(int task_no)
{
int s,up_neighbor,down_neighbor,i;
float address,length;
for (s=0; s<USED_TABLE_LEN; s++)
{
if (used_table[s].flag == task_no)
break;
}
if (s >= USED_TABLE_LEN) {
printf("未找到作业,回收失败\n");
return;
}
address = used_table[s].address;
length = used_table[s].length;
used_table[s].flag = 0;
up_neighbor = -1;
down_neighbor = -1;
i = 0;
while (1)
{
if ((free_table[i].flag == 0) || (up_neighbor != -1) && (down_neighbor != -1))
break;
if (!free_table[i].flag) {
i++;
continue;
}
if (free_table[i].address + free_table[i].length == address) {
up_neighbor = i++;
continue;
}
if (address + length == free_table[i].address) {
down_neighbor = i++;
continue;
}
i++;
}
if (up_neighbor != -1) {
if (down_neighbor != -1) {
free_table[up_neighbor].length =free_table[up_neighbor].length + length + free_table[down_neighbor].length;
free_table[down_neighbor].flag = 0;
}
else {
free_table[up_neighbor].length += length;
}
}
else {
if (down_neighbor != -1) {
free_table[down_neighbor].length += length;
free_table[down_neighbor].address = address;
}
else {
for (i=0; i<FREE_TABLE_LEN; i++)
{
if (!free_table[i].flag)
break;
}
if (i>=FREE_TABLE_LEN) {
used_table[s].flag = 1;
printf("空闲区长度不足,回收失败!!!\n");
}
else {
free_table[i].address = address;
free_table[i].length = length;
free_table[i].flag = 1;
}
}
}
printf("作业 %d 回收成功!\n",task_no);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -