繁体   English   中英

我在获取最合适的分配以获取更多然后分配几个方面遇到麻烦

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM