资源简介
操作系统内存分配与回收C语言模拟。包含源代码和.exe可执行文件

代码片段和文件信息
#define minisize 50 /*空闲区_申请空间≤minisize 时,分配整个空闲区*/
#define m 20 /*假定系统允许的空闲区表最大为m*/
#include “stdio.h“
/*系统中主要数据结构*/
struct
{float address; /*空闲区起始地址*/
float length; /*空闲区长度,单位为字节*/
int flag; /*空闲区表登记栏标记,用0表示空栏目,用1表示未分配*/
}free_table[m]; /*空闲区表*/
struct
{
float address;
float length;
int flag;
}used_table[m];
void init_free_table() //采用最佳适应算法初始化内存分区
{
int i;
free_table[0].address=0;
free_table[0].length=200;
free_table[0].flag=1;
for(i=1;i {
free_table[i].address=free_table[i-1].address+free_table[i-1].length;
free_table[i].length=free_table[i-1].length+300;
free_table[i].flag=1;
}
}
void init_used_table()
{
int i;
for(i=0;i {
used_table[i].address=0;
used_table[i].length=0;
used_table[i].flag=0;
}
}
float xk0=0;//定义一个全局变量存储实际分配长度
float input()
{
float a;
while(1)
{
fflush(stdin);
printf(“请输入要装入的程序的大小:“);
scanf(“%f“&a);
if(a<=0)
printf(“输入数值不合法!“);
else
break;
}
return a;
}
float allocate(float xk)
{
int ik;
float ad;
k=-1;
for(i=0;i if((free_table[i].flag==1) && (free_table[i].length>=xk))
{k=i;
break;}
if(k==-1) /* 无可用空闲区返回 */
{printf(“no free space\n“);
return(-1);
}
if(free_table[k].length-xk<=minisize) /* 找到可用空闲区开始分配 */
{free_table[k].flag=0;
ad=free_table[k].address;
xk=free_table[k].length;
}
else
{free_table[k].length=free_table[k].length-xk;
ad=free_table[k].address+free_table[k].length;
}
xk0=xk;
return(ad);
}
void record(float xk1) //记录已分配内存
{
static int used_i=0; //只初始化一次
float ad1;
ad1=allocate(xk1);
if(ad1==-1)
{
printf(“无法装入该程序!“);
return;
}
used_table[used_i].address=ad1;
used_table[used_i].length=xk0;
used_table[used_i].flag=1;
used_i++;
}
void display_free()
{
int i;
printf(“未分配内存:\n“);
printf(“编号 开始地址 结束地址 长度 状态\n“);
for(i=0;i {
if(free_table[i].flag==1)
{
printf(“ %2d %5g %5g %5g 未分配\n“i+1free_table[i].addressfree_table[i].address+free_table[i].lengthfree_table[i].length);
}
}
printf(“\n\n“);
}
void display_used()
{
int i;
printf(“已分配内存:\n“);
printf(“编号 开始地址 结束地址 长度 状态\n“);
for(i=0;i {
if(used_table[i].flag==1)
{
printf(“ %2d %5g %5g %5g 已分配\n“i+1used_table[i].addressused_table[i].address+used_table[i].lengthused_table[i].length);
}
}
printf(“\n\n“);
}
void re
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6656 2014-06-22 15:19 collect.exe
文件 5484 2014-06-22 15:19 main.c
- 上一篇:使用c语言写的卷积运算程序
- 下一篇:c++面向对象程序设计 谭浩强第二版习题答案
相关资源
- 操作系统c语言模拟文件管理系统844
- 操作系统课设 读写者问题 c语言实现
- ROS操作系统入门讲义
- Linux操作系统下C语言编程从零开始
- 操作系统存储管理实验报告c/c++
- 操作系统课程设计(银行家算法)附
- 现代操作系统第三版高清
- C++操作系统课设-进程管理
- 哲学家进餐问题的c++模拟实现
- 操作系统课程设计(生产者-消费者存
- 操作系统——5个实验.zip
- 操作系统进程管理实验
- 操作系统—页面置换算法C++实现
- 操作系统 内存管理 模拟 图形界面
- 银行家算法 mfc 含源代码 界面 操作系
- 操作系统生产者消费者问题MFC动态实
- 操作系统课程设计:Windows 命令接口之
- 操作系统课程大作业-文件管理系统
- C语言实现最低松弛度优先算法源代码
- 操作系统信号量PV经典问题:沉睡的理
- 基于C++的银行家算法模拟实现
- 生产者消费者问题源码-MFC实现-进程模
- 操作系统实验 进程调度 高响应比优先
- 操作系统文件管理C++代码实现
- 嗜睡的理发师进程同步与实现c++
- 安徽大学操作系统实验八基于扫描的
- 安徽大学操作系统实验四主存空间的
- 操作系统——银行家算法
- 操作系统_生产者消费者c++、mfc实现
- 磁盘调度c++模拟实现计算机操作系统
评论
共有 条评论