Word *addr = AllocBoundTag(pav, myJob.size);
if (addr == NULL) // 分配失败
{
break;
}
jobNameToAddr[myJob.name] = addr;
jobAddrToName[addr] = myJob.name;
break;
}
case 2:
{
cout << "请输入要回收的作业名称:" << endl;
string name;
cin >> name;
Word *addr = jobNameToAddr[name]; // 用户释放的内存区的头部地址为addr
if (NULL == addr)
{
cout << "作业" << name << "不存在,无法释放!" << endl;
break;
}
Recycle(pav, addr);
int cnt = jobAddrToName.erase(addr);
assert(cnt == 1);
cnt = jobNameToAddr.erase(name);
assert(cnt == 1);
break;
}
case 3:
return 0;
default:
cout << "输入错误!请重新输入。" << endl;
break;
}
} while (true);
return 0;
}
/* cin.txt
1
J5 96
1
J2 6
1
J4 12
1
J3 4
1
J1 5
1
OS 5
2
J4
2
J5
2
J3
1
J6 20
3
*/
5、运行结果:
[cpp] view plaincopyprint
************************************
起址 大小 状态 (作业名)
0 128 0 (空闲)
************************************
请选择:1、分配内存 2、回收内存 3、退出
************************************
起址 大小 状态 (作业名)
0 32 0 (空闲)
32 96 1 J5
************************************
请选择:1、分配内存 2、回收内存 3、退出
请输入作业名和作业大小:
************************************
起址 大小 状态 (作业名)
0 26 0 (空闲)
26 6 1 J2
32 96 1 J5
************************************
请选择:1、分配内存 2、回收内存 3、退出
请输入作业名和作业大小:
************************************
起址 大小 状态 (作业名)
0 14 0 (空闲)
14 12 1 J4
26 6 1 J2
32 96 1 J5
************************************
请选择:1、分配内存 2、回收内存 3、退出
请输入作业名和作业大小:
************************************
起址 大小 状态 (作业名)
0 10 0 (空闲)
10 4 1 J3
14 12 1 J4
26 6 1 J2
32 96 1 J5
************************************
请选择:1、分配内存 2、回收内存 3、退出
请输入作业名和作业大小:
************************************
起址 大小 状态 (作业名)
0 5 0 (空闲)
5 5 1 J1
10 4 1 J3
14 12 1 J4
26 6 1 J2
32 96 1 J5
************************************
请选择:1、分配内存 2、回收内存 3、退出
请输入作业名和作业大小:
************************************
起址 大小 状态 (作业名)
0 5 1 OS
5 5 1 J1
10 4 1 J3
14 12 1 J4
26 6 1 J2
32 96 1 J5
************************************
请选择:1、分配内存 2、回收内存 3、退出
请输入要回收的作业名称:
************************************
起址 大小 状态 (作业名)
0 5 1 OS
5 5 1 J1
10 4 1 J3
14 12 0 (空闲)
26 6 1 J2
32 96 1 J5
************************************
请选择:1、分配内存 2、回收内存 3、退出
请输入要回收的作业名称:
************************************
起址 大小 状态 (作业名)
0 5 1 OS
5 5 1 J1