写在前面
欢迎讨论~
问题描述
题目:下次适应(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

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

被折叠的 条评论
为什么被折叠?



