[英]im having trouble getting my best fit allocation to get more then a few to allocate
嗨,我正在为一个类编写一个模拟操作系统,并尝试使用最佳拟合分配技术为进程分配内存。 我的列表有两个参数num_units和process_id,有128个单位要启动,如果我的程序搜索并找到-1,则进程id为-1,然后比较该数量的单位,如果适合,将新Node插入列表中。 我一直遇到它仅在模拟的10,000中分配3或4个项目的问题,这是分配功能
int allocate_mem(int process_id, int num_units)
{
list<Node>::iterator best = memory_list.begin();
// TODO: Implement
for(list<Node>::iterator cur = memory_list.begin(); cur != memory_list.end(); ++cur)
{
if (cur->process_id == HOLE_PROCESS_ID)
{
if (cur->num_units == num_units)
{
cur->process_id = (process_id);
num_alloc_successes++;
return temp;
}
else if (cur->num_units > num_units)
{
if (best->num_units > cur->num_units)
{
best = cur;
}
}
}
temp++;
}
if (best->num_units > num_units)
{
best->num_units = (best->num_units - num_units);
memory_list.insert(best,1,Node(process_id, num_units));
num_alloc_successes++;
return temp;
}
++num_alloc_failures;
return -1;
}
还有一个似乎可以正常工作的解除分配功能
在此先感谢您的帮助。
首先,提早退出for循环的唯一方法是完全匹配。
其次,只要cur-> num_units> num_units,best最好一直设置为cur,这样就可以成为满足该要求的列表中的最后一个元素。
第三,您没有正确分割部分使用的块。 我很确定您正在破坏信息。 实际上,您似乎没有任何合并内存块的方法。 您是否按大小对列表进行排序?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.