资源简介
操作系统 循环首次适应算法 回收内存 分配内存设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。
代码片段和文件信息
#include
#include
#include“stdlib.h“
#define getpch(type) (type*)malloc(sizeof(type))
#define SysSize 1000;
struct LNode
{
int size;
char *m_addr;
struct LNode *next;
struct LNode *front;
}*L; /*L为头指针*/
typedef struct LNode LN;
LN *find; //查找节点
int n //表示空闲分区数量
fsize //空闲分区总量
iniaddr; //初始地址位置
char *SysMemory;
void PrintList() /*打印内存存储状况*/
{
LN *p; int i;
p=L;
printf(“\n空闲空间状况(以%d为起始地址)\n“SysMemory);
printf(“\n空闲区号 长度 起始位置 相对位置\n“);
for(i=1;i<=n;i++)
{
printf(“%8d %4d %8d %8d\n“ip->size p->m_addr (p->m_addr-SysMemory));
p=p->next;
}
printf(“\n“);
}
void Initialize() /*生成空闲分区链*/
{
int a = SysSize;
L=getpch(LN); /*生成一个表头结点*/
L->next=L;
L->front=L;
SysMemory = (char*) malloc(a);
L->m_addr=SysMemory;
L->size = SysSize;
fsize = L->size;
iniaddr = (int)L->m_addr;
n = 1;
find = L;
PrintList();
printf(“\n空闲地址建立完成\n“);
}// end of GetFree
void NF_Assign(unsigned size)/*循环首次适应算法的分配*/
{
LN *p*t*s;
p=find;
if (fsize <= 0)
{
printf(“系统已无可用空间\n“);
return;
}
else if (size > fsize)
{
printf(“系统空间不足!分配不成功\n“);
return;
}
else if (size <= 0)
{
printf(“大小不正确!\n“);
}
do
{
if(size > p->size)
{
p=p->next;
if(p==find)
{
printf(“没有足够大的空闲区分配!分配不成功\n“); break;
}
}
else
{
p->size -= size;
p->m_addr += size;
fsize -= size;
find=p->next;
if(p->size==0)
{
t = getpch(LN);
t=p->next;
t->front=p->front;
(t->front)->next=t;
n--;
if (p == L) {L=t;}
free(p);
find = t;
}
printf(“\n分配成功!\n“);
break;
}
} while (1);
}// end of NF_Assign
void AdrSpace(unsigned size unsigned adr)
{
LN *p*t;
if(adr+SysMemory < L->m_addr)
{
t = getpch(LN);
t->size=L->size;
t->m_addr = L->m_addr;
t->next = L->next;
L->m_addr = SysMemory + adr;
L->size = size;
L->next = t;
t->front = L;
for(p=L;p->next != L;p=p->next){}
p->next = L;
L->front = p;
}
else
{
p=L;
do
{
if (p->m_addr > SysMemory + adr) break;
p = p->next;
}
while(p!=L);
t = getpch(LN);
t->size = size;
t->next = p;
t->front = p->front;
p->front->next = t;
t->m_addr = adr+SysMemory;
}
}
void Recover(unsigned size unsigned adr) /*回收*/
{
LN *
- 上一篇:从资源或内存中加载dll
- 下一篇:英汉汉英字典,支持离线。查询速度快
相关资源
- WebSocket客户端测试工具:v4.20_免费版
- junit单元测试实验
- cuda_8.0.44_windows
- WCF分布式事务配置文档+Demo
- BUCK电路设计计算
- ArcEngine二次开发 地图中的查询统计
- Patch_Sparsity代码opencv
- cygwin1.rar
- cvtres.exe
- vc汉字识别
- 232转485电路图 PCB 和原理图
- 毕业设计智能灯
- openGL打包库
- FX2NPLC+2AD+4ADTC+2DA+电阻尺+编码器+PID温
- iis6.0 forwin 2003 里面5个难找的组件cf
- S7-200 CAD图集
- RTC DS1307驱动源码
- arcgis10.5 server+desktop
- AES CCM 实现一代码
- tms320c5416原理图
- Visual Basic开发实战1200例(第2部).(
- Zprotect1.6脱壳机
- 台达PLC-PID控制温度程序
- 进程调度算法包括先来先服务调度算
- MC8000硬件说明书.
- 利用ICMP进行路由跟踪
- 移远调试工具
- 页面DIV+CSS布局DW产品展示网页设计制
- NRF24L01的STM32测试程序
- MC8051_RAM_ROM,与MC8051_top 文件配套的
评论
共有 条评论