• 大小: 95KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-18
  • 语言: 其他
  • 标签: code  

资源简介

包括实验题目,代码及运行结果 实验5 内存管理(2学时) 一、实验目的 通过实验加强对内存管理方法的理解和掌握。 二、实验内容 编写程序实现采用可变分区方法管理内存。 三、实验要求 1、在该实验中,采用可变分区方式完成对存储空间的管理(即存储空间的分配与回收工作)。 2、设计用来记录主存使用情况的数据结构:已分区表和空闲分区表或链表。 3、在设计好的数据结构上设计一个主存分配算法(循环首次适应算法)。 4、在设计好的数据结构上设计一个主存回收算法。其中,若回收的分区有上邻空闲分区和(或)下邻空闲分区,要求合并为一个空闲分区登记在空闲分区表的一个表项里。 5、(附加)若需要可以实现程序的浮动,对内存空间进行紧凑。

资源截图

代码片段和文件信息

#include 
#include 
#include 
using namespace std;

/*** 空闲链 ***/
struct Block{
    Block* fro; // 前向指针
    Block* nex; // 后向指针
    int sta_add; // 起始地址
    int sz; // 空闲块大小
    bool state; // 分配状态 1表示已经分配 0表示空闲
    char name[10]; // 占用分区作业名称
}*block*first*p; // block: 分区块遍历变量 first: 分区首地址 p: 下一个开始遍历的分区块地址
int n; // 空闲块数
/*** 作业 ***/
struct Work{
    char name[10]; // 作业名称
    int sz; // 作业大小
    Block* add; // 分区块的地址
    int block_sz; // 分区块的大小
    bool finish; // 作业完成状态 1表示已完成,0表示未完成
}work[100];
int id = 0; // 作业数量

void input(){
    cout << “请输入空闲块数: “;
    cin >> n;
    Block* fro;
    int now = 0; // 起始地址
    for(int i=0; i        cout << “请输入第“ << i+1 << “块分区大小: “;
        int sz; cin >> sz;
        block = new Block();
        block->state = 0;
        block->sz = sz;
        block->sta_add = now;
        now = now+sz;
        strcpy(block->name“NULL“);
        if(i == 0) first = block;
        else block->fro = frofro->nex = block;
        fro = block;
    }
    block->nex = first;
    p = first;
}

bool allocation(int id){
    cout << “请输入作业名称 作业大小: “;
    char name[10]; int sz;
    cin >> name >> sz;
    block = p;
    for(int t=0; t        if(block->state == 1) { block = block->nex; continue;}
        if(block->sz >= sz){
            cout << “分配成功!“ << endl;
            block->state = 1;
            strcpy(block->namename);
            work[id].block_sz = block->sz;
            strcpy(work[id].namename);
            work[id].add = block;
            work[id].sz = sz;
            p = block->nex;
            return 1;
        }
        block = block->nex;
    }
    cout << “分配失败!“ << endl;
    return 0;
}

void pback(){
    cout << “请输入完成作业名称: “;
    char name[10]; cin >> name;
    bool flag = 0;
    for(int i=0; i        if(strcmp(work[i].namename)==0 && work[i].finish==0){
            block = work[i].add;
            strcpy(block->name“NULL“);
            block->state = 0;
            work[i].finish = 1;
            flag = 1;
            break;
        }
    }
    if(flag == 0) { cout<<“没有该作业!\n“; return ;}
    Block* fro* nex;
    nex = block->nex;
    if(block == first){
        if(n == 1) {
            cout << “回收成功! \n“;
            return ;
        }
        if(nex->state == 0){
            block->nex = nex->nex;
            nex->nex->fro = block;
            block->sz = block->sz+nex->sz;
            if(p == nex) p = nex->nex;
            delete nex;
        }
    }else if(block->nex == first){
        fro = block->fro;
        if(fro->state == 0){
            fro->nex = block->nex;
            fro->sz = fro->sz+block->sz;
            if(p == block) p = block->nex;
            delete block;
        }
    }else{
        fro = block->fro;
        nex = block->nex;
        if(fro->state==0 && nex->state==0){
            fro->nex = nex->nex;
           

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5060  2018-05-23 21:14  main.cpp
     文件       30208  2018-05-23 15:16  实验题目5.doc
     文件       97390  2018-05-23 21:13  新建 Microsoft Word 文档.docx

评论

共有 条评论