内存的连续分配与回收算法(三)

2014-11-24 08:58:24 · 作者: · 浏览: 3
ob.size;
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