下次适应(Next Fit)算法 | 存储分配 | Java实现(详细注释)

本文详细介绍了NextFit存储分配算法的Java实现过程,包括设计数据结构、编写分配与释放函数,以及处理各种边界情况。通过具体示例展示了算法在不同场景下的应用。

写在前面

欢迎讨论~


问题描述

题目:下次适应(Next Fit)存储分配算法
要求:设计存储资源数据结构arrayof(m_size,m_addr),编写两个函数:(1) malloc(int size), 申请一个长度为size的空闲存储区,返回区域起始地址,不能满足时返回0;(2) mfree(int size, int aa), size为释放区域大小,aa为起始地址。
说明:(1) 申请时有两种情况:按下次适应找到的空闲区域大小与size相同;空闲区域大于size. (2) 释放时有四种情况:释放区域与前面空闲区相邻,与后面空闲区相邻,与前后空闲区均相邻,与前后空闲区均不相邻。
提示:需要设一个静态变量static p, 指向下次分配时的起始查找位置,注意表的首尾相连。


Java实现

ArrayOf 保存空闲空间的数据结构
Disk模拟内存实现nextFit算法
Main主函数和测试数据


ArrayOf

/**
 * 保存你存剩余空间的数据结构
 * m_addr 剩余空间的首地址
 * m_size 剩余空间的大小
 */
public class ArrayOf {
   
   
    public int m_addr;/*剩余空间的首地址*/
    public int m_size;/*剩余空间的大小*/

    @Override
    public String toString() {
   
   
        return "{" +
                 + m_addr +
                "," + m_size +
                '}';
    }
}


Disk

import java.util.Arrays;

/**
 * 模拟内存,实现申请释放空间的算法
 * (1) 申请时有两种情况:按下次适应找到的空闲区域大小与size相同;空闲区域大于size.
 * (2) 释放时有四种情况:释放区域与前面空闲区相邻,
 *     与后面空闲区相邻,与前后空闲区均相邻,与前后空闲区均不相邻。
 */
public class Disk {
   
   
    int arraySize=10;/*arrayOf数组的大小*/
    private ArrayOf[] arrayOf=new ArrayOf[arraySize];/*保存内存剩余的空间*/
    int p;/*下次查找位置,Java中无指针*/

    Disk(){
   
   
        p=0;
        for (int i=0;i<arraySize;i++)
        {
   
   
            arrayOf[i]=new ArrayOf();
        }
        arrayOf[0].m_size=10000;
        arrayOf[0].m_addr=200;
        arrayOf[1].m_size=0;
        System.out.println("初始状态:"+outArray());
    }
    /**
     *  申请一个长度为size的空闲存储区,返回区域起始地址,不能满足时返回0
     * @param size 申请空间大小
     * @return 不能满足时返回0
     */
    public int malloc(int size){
   
   
        /*申请空间需要更新next指针,ArrayOf表保存了存储区中的空闲区域(首地址和大小),首先根据ArrayOf表找到合适的空间,然后更新ArrayOf表*/
        
        int new_p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值