内存连续分配方式实验.doc

内存连续分配方式实验.doc

ID:57330341

大小:93.50 KB

页数:6页

时间:2020-08-12

内存连续分配方式实验.doc_第1页
内存连续分配方式实验.doc_第2页
内存连续分配方式实验.doc_第3页
内存连续分配方式实验.doc_第4页
内存连续分配方式实验.doc_第5页
资源描述:

《内存连续分配方式实验.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验三内存连续分配方式实验一、目的要求用高级语言编写和调试一个内存连续分配模拟程序,以加深对进程的概念及进程调度算法的理解.二、相关内容内存连续分配动态分区分配流程图三、实验要求:设计程序模拟内存动态分区分配流程,要求如下1、实现三项功能:分配内存、回收内存、显示内存使用情况2、内存分配表建议使用顺序表或者单链表实现,逻辑结构如下图(a)3、分区分配算法建议使用最佳分配算法4、假设内存大小为1024K,起始地址为0,都可以被用户程序使用,size数值设为2K参考程序:#include "stdio.h"#include "stdlib.h"#include "string.h"#def

2、ine SIZE_MIN 2#define MEMSIZE_MAX 1024#define FALSE 0#define TRUE !FALSEtypedef int BOOL;typedef struct _MEM_LINK{charcName;/*作业名*/intiStartAddr;/*分区起始地址*/intiMemSize;/*分区大小*/BOOLiState;/*分区状态,1表示已分配, 0表示未分配*/struct _MEM_LINK* next;}MEM_LINK, *PMEM_LINK;PMEM_LINK g_pslnkHead;/*初始化内存使用情况*/void in

3、it(){g_pslnkHead=(PMEM_LINK)malloc(sizeof(MEM_LINK));memset(g_pslnkHead, 0, sizeof(MEM_LINK));g_pslnkHead->iMemSize = MEMSIZE_MAX;}int menu(){int i;printf("1. 分配内存");printf("2. 回收内存");printf("3. 显示内存使用情况");printf("4. 退出");printf("请输入选择:");scanf("%d",&i);getchar();return(i);}/*分配内存函

4、数,c为作业名,usize是要分配的大小*/int my_malloc(char c,int usize){PMEM_LINK psNewMem = NULL, plnkTmp = NULL;BOOL bRepeatName = FALSE;int iTmp = g_pslnkHead->iMemSize - usize*SIZE_MIN;if (iTmp <= 0) /* 如果没有足够的空间分配 */return FALSE;plnkTmp= g_pslnkHead;while (plnkTmp != NULL){if (plnkTmp->cName == c){bRepeatNam

5、e = TRUE;break;}plnkTmp = plnkTmp->next;}if (bRepeatName) /* 如果作业名重复 */{return FALSE;}/* 创建新的节点 */psNewMem = (PMEM_LINK)malloc(sizeof(MEM_LINK));/* 结构体设零 */memset(psNewMem, 0, sizeof(MEM_LINK));/* 设置节点内容 */psNewMem->cName= c;psNewMem->iMemSize= usize*SIZE_MIN;psNewMem->iStartAddr= MEMSIZE_MAX - 

6、g_pslnkHead->iMemSize;psNewMem->iState= TRUE;plnkTmp= g_pslnkHead;/* 查找链表最尾节点 */while (plnkTmp->next != NULL) plnkTmp = plnkTmp->next;/* 把新创建的节点加入到链表中 */plnkTmp->next= psNewMem;/* 在整体内存中去掉以分配的部分 */g_pslnkHead->iMemSize -= usize*SIZE_MIN;return TRUE;}/*回收内存函数,c是撤销的进程的作业名;*/int my_free(char c){PME

7、M_LINK plnkBK = g_pslnkHead,/* 保留上次搜索的节点 */ plnkTmp = g_pslnkHead->next; BOOL bFind = FALSE;int iFreeSize = 0;/* 搜索链表 */while (plnkTmp != NULL){if (plnkTmp->cName == c){ /* 如果找到节点,退出循环 */bFind = TRUE;break;}plnkBK = plnkTmp;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。