内存的分配与回收

内存的分配与回收实验报告

一.实验目的
通过分区管理,了解操作系统的基本概念,理解计算机系统的资源如何组织,操作系统 如何有效的管理系统资源,用户如何通过操作系统与计算机打交道。
二、实验要求
要求用一种结构化高级语言构造分区,编制动态分区分配算法和回收算法模拟程序,并 掌握分配算法的特点,提高编程技巧和对算法的理解。
三、实验过程
数据结构
1.定义分区 node,包括三个要素:
addr:分区首地址; size:分区大小;next:指向下一个分区的指针
2.定义了三个 node 结构的指针变量:
head1:空闲分区队列首指针 back1:指向释放区 node 结构的指针 assign:指向申请的内存分区 node 结构的指针
3.整型变量 free:用户申请的存储区的大小
过程

  1. 定义 check 函数,用于检查指定的释放块(由用户键入)的合法性
  2. 定义 assignment1 函数,实现 First fit 算法
  3. 定义 assignment2 函数,实现 Best fit 算法
  4. 定义 acceptment1 函数,实现 first fit 算法的内存回收
  5. 定义 acceptment2 函数,实现 best fit 算法的内存回收
  6. 定义 print 函数,打印空闲分区队列

执行:
程序首先申请一整块空闲区,首址为 0,大小为 32767,然后,提示用户使用哪种分配算法, 再提示做何种操作;分配时要求输入申请区的大小,回收时要求输入释放区的首址和大小。
*四、实验源码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 32767
typedef struct node 
{
   
int id; 
int adr;
int size; 
struct node *next;
}Node;

Node *head1,*head2,*back1,*back2,*assign;
int request; 
int check(int add,int size,char c)
{
   
Node *p,*head;
int check=1;
if(add<0||size<0)
check=0;    
if(c=='f'||c=='F')
head=head1;
else
head=head2;
p=head->next;
while((p!=NULL)&&check)
if(((add<p->adr)&&(add+size>p->adr))||((add>=p->adr)&&(add<p->adr+p->size)))
check=0;
else
p=p->next;

if(check==0)
printf("\n 输入释放区地址或大小有错误\n");
return check; 
}

void init()
{
    
Node *p,*q;
head1=(Node*)malloc(sizeof(Node));
head2=(Node*)malloc(sizeof(Node));
p=(Node*)malloc(sizeof(Node));
q=(Node*)malloc(sizeof(Node));
head1->next=p;
head2->next=q;
p->size=q->size=MAX_SIZE;
p->adr=q->adr=0;
p->next=q->next=NULL;
p->id=q->id=0;

}

Node* assignment1(int num,int req)
{
   
Node *before,*after
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值