版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验三 内存管理1一实验目的1二实验内容1三实验设计1四模拟实验2First.cpp3First.h5Next.cpp7Next.h9五实验结果12六实验总结15实验三 内存管理一实验目的构造一个没有虚存功能的内存管理系统,并进行测试和对不同分配策略的性能展开比较评估。本次实验,选择的分配策略:First-fit 和 next-fit二实验内容1、设计一个内存管理器,支持至少两种分配策略(本实验使用firstfit策略和nextfit策略);2、分别对不同的策略进行性能评估三实验设计1.内存unsigned char mm65536;2. 用户接口用户接口函数:int mm_init() /初
2、始化int mm_request(int n) /申请空间void mm_release(int p) /释放空间3计算请求尺寸srand(unsigned char)time(NULL);tmp = (rand() % 1024) + 1; /最大申请10244.选择待释放的块tmp = (rand() % j);while(ptmp = -1)tmp = rand() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout << "释放指针 " <&
3、lt; ptmp << endl;ptmp = -1;四模拟实验实现两个版本的内存管理器,分配策略分别为:first-fit和next-fitFirst.cpp#include <iostream>#include <stdio.h>#include <windows.h>#include <time.h>#include "first.h"using namespace std;int main()int i;int j = 0; /分配指针数int p1000; /用于存放分配出的指针int tmp;int r
4、equestsize = 0; /统计申请空间int k = 0; /统计搜索步数srand(unsigned char)time(NULL);step = 0;mm_init();for(i = 0; i < 30; i+) /模拟30步cout << "第 " << i + 1 << " 步" << endl;dotmp = (rand() % 1024) + 1; /最大申请1024cout << "申请空间 " << tmp << &qu
5、ot; 字节" << endl;pj = mm_request(tmp);if(pj != -1)requestsize = requestsize+tmp;k = k + step;cout << "分配指针 " << pj << endl;cout << endl;j+;elsecout << "剩余空间不足,分配失败" << endl;while(pj != -1);tmp = (rand() % j);while(ptmp = -1)tmp = rand
6、() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout << "释放指针 " << ptmp << endl;ptmp = -1;/以下为性能统计指标cout << endl;cout << "平均申请空间:" << (double)requestsize / (double)j << " 字节" << endl;cout <
7、< "平均空间利用率:" << (double)requestsize/(double)65536 << endl;cout << "平均搜索步数:" << (double)k/(double)j << endl;cout << endl;if(i + 1) % 5 = 0)system("pause");First.hunsigned char mm65536;int step; /记录搜索步数int BinToInt(unsigned char *s)
8、/把char类型变成intint i;char tmp4;int t;for(i = 0; i < 4; i+)tmp3 - i = si;memcpy(&t,tmp,4);return t;void IntToBin(int s, unsigned char *t) /把int类型变成charint i;char tmp4;memcpy(tmp,&s,4);for(i = 0; i < 4; i+)ti = tmp3 - i;int mm_init()memset(mm, 0, 65536);IntToBin(-1, mm); /前向指针 置-1 放在数组的第一个
9、位置IntToBin(65536, &mm4); /整个块大小,放在第四个位置IntToBin(-1, &mm65536-4); /后向指针 置-1 放在数组的倒数第四个位置return 0;int mm_request(int n)/四字节前向指针、四字节块大小、一字节状态、N字节可用内存、四字节后向指针int pointer = 0;step = 0;while(mmpointer+8=1)|(n+26)>=BinToInt(&mmpointer+4) /pointer+4 表示块大小/mmpointer+8=1 状态位是一,说明这一块已经被分配/n+26 申
10、请的空间+管理开销pointer=BinToInt(&mmpointer+BinToInt(&mmpointer+4)-4); /找到后向指针if(mmpointer+8 != 1)step+;/非空闲块不在链内,不计步数if(pointer = -1)return -1;mmpointer + 8 = 1; /修改本块标志位IntToBin(pointer + 4 + 4 + 1 + n + 4, &mmpointer + 9 + n); /修改本块后向指针IntToBin(pointer, &mmpointer + 4 + 4 + 1 + n + 4); /
11、修改后块前向指针IntToBin(BinToInt(&mmpointer + 4) - n - 13, &mmpointer + 4 + 4 + 1 + n + 4 + 4); /修改后块大小IntToBin(n + 13,&mmpointer + 4); /修改本块大小return pointer;void mm_release(int p)int pre;int bac;pre = BinToInt(&mmp);bac = BinToInt(&mmp + BinToInt(&mmp + 4) - 4);mmp + 8 = 0; /修改本块标志
12、位if(BinToInt(&mmbac+8) = 0) /如果后块未使用IntToBin(0,&mmp+BinToInt(&mmp + 4) - 4); /清空本块后向指针IntToBin(0,&mmbac); /清空后块前向指针IntToBin(BinToInt(&mmp + 4) + BinToInt(&mmbac + 4), &mmp + 4); /修改本块大小if(BinToInt(&mmbac + BinToInt(&mmbac + 4) - 4) != -1) /如果后块不是最后一块IntToBin(p, &a
13、mp;mmBinToInt(&mmbac + BinToInt(&mmbac + 4) - 4); /修改后块的后块前向指针IntToBin(0, &mmbac + 4); /清空后块大小if(pre = -1)return;if(BinToInt(&mmpre + 8) = 0) /如果前块未使用IntToBin(0, &mmpre + BinToInt(&mmpre + 4) - 4); /清空前块后向指针IntToBin(BinToInt(&mmpre + 4) + BinToInt(&mmp + 4), &mmpr
14、e + 4); /修改前块大小IntToBin(pre, &mmBinToInt(&mmp + BinToInt(&mmp + 4) - 4); /修改后块前向指针IntToBin(0, &mmp + 4); /清空本块大小IntToBin(0, &mmp); /清空本块前向指针Next.cpp#include <iostream>#include <stdio.h>#include <windows.h>#include <time.h>#include "next.h"using n
15、amespace std;int main()int i;int j = 0; /分配指针数int p1000; /用于存放分配出的指针int tmp;int requestsize = 0; /统计申请空间int k = 0; /统计搜索步数srand(unsigned char)time(NULL);step = 0;next = 0;end = -1;mm_init();for(i = 0; i < 30; i+)/模拟30步cout << "这是第 " << i + 1 << " 步" <<
16、endl;dotmp = (rand() % 1024) + 1; /最大申请1024cout << "申请空间 " << tmp << " 字节" << endl;pj = mm_request(tmp);if(pj != -1)requestsize = requestsize + tmp;k = k + step;cout << "分配指针:" << pj << endl;cout << endl;j+;elsecout <&l
17、t; "剩余空间不足,分配失败。" << endl;while(pj != -1);tmp = (rand() % j);while(ptmp = -1)tmp = rand() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout << "释放指针:" << ptmp << endl;ptmp = -1;/以下为性能统计指标cout << endl;cout << "
18、平均申请空间:" << (double)requestsize/(double)j << " 字节" << endl;cout << "平均空间利用率:" << (double)requestsize/(double)65536 << endl;cout << "平均搜索步数:" << (double)k/(double)j << endl;cout << endl;if(i + 1) % 5 = 0)sy
19、stem("pause");Next.hunsigned char mm65536;int step;int next;int end;int BinToInt(unsigned char *s)int i;char tmp4;int t;for(i = 0; i < 4; i+)tmp3 - i = si;memcpy(&t,tmp,4);return t;void IntToBin(int s, unsigned char *t)int i;char tmp4;memcpy(tmp,&s,4);for(i = 0; i < 4; i+)ti
20、= tmp3 - i;int mm_init()memset(mm, 0, 65536);IntToBin(-1, mm);IntToBin(65536, &mm4);IntToBin(-1, &mm65536-4);return 0;int mm_request(int n)/四字节前向指针、四字节块大小、一字节状态、N字节可用内存、四字节后向指针int pointer;step = 0;pointer = next;while(pointer != -1)if(mmpointer + 8 != 1) && (n + 26) < BinToInt(&am
21、p;mmpointer + 4)break;pointer = BinToInt(&mmpointer + BinToInt(&mmpointer + 4) - 4);/step+;if(mmpointer + 8 != 1)step+;if(pointer = -1)pointer = 0;while(pointer != end)if(mmpointer + 8 != 1) && (n + 26) < BinToInt(&mmpointer + 4)break;pointer = BinToInt(&mmpointer + BinToI
22、nt(&mmpointer + 4) - 4);if(mmpointer + 8 != 1)step+;/step+;if(pointer = end)return -1;mmpointer+8 = 1; /修改本块标志位IntToBin(pointer + 4 + 4 + 1 + n + 4, &mmpointer + 9 + n); /修改本块后向指针IntToBin(pointer, &mmpointer + 4 + 4 + 1 + n + 4); /修改后块前向指针IntToBin(BinToInt(&mmpointer + 4) - n - 13, &
23、amp;mmpointer + 4 + 4 + 1 + n + 4 + 4); /修改后块大小IntToBin(n + 13, &mmpointer + 4); /修改本块大小end = pointer;next = pointer + 4 + 4 + 1 + n + 4;return pointer;void mm_release(int p)int pre;int bac;pre = BinToInt(&mmp);bac = BinToInt(&mmp + BinToInt(&mmp + 4) - 4);mmp + 8 = 0; /修改本块标志位if(Bin
24、ToInt(&mmbac + 8) = 0) /如果后块未使用IntToBin(0, &mmp + BinToInt(&mmp + 4) - 4); /清空本块后向指针IntToBin(0, &mmbac); /清空后块前向指针IntToBin(BinToInt(&mmp + 4) + BinToInt(&mmbac + 4), &mmp + 4); /修改本块大小if(BinToInt(&mmbac + BinToInt(&mmbac + 4) - 4) != -1) /如果后块不是最后一块IntToBin(p, &am
25、p;mmBinToInt(&mmbac + BinToInt(&mmbac + 4) - 4); /修改后块的后块前向指针IntToBin(0, &mmbac + 4); /清空后块大小if(pre = -1)return;if(BinToInt(&mmpre + 8) = 0) /如果前块未使用IntToBin(0, &mmpre + BinToInt(&mmpre + 4) - 4); /清空前块后向指针IntToBin(0, &mmp); /清空本块前向指针IntToBin(BinToInt(&mmpre + 4) + BinToInt(&mmp + 4), &mmpre + 4); /修改前块大小IntToBin(pre, &mmBinToInt(&mmp + BinToInt(&mmp + 4) - 4); /修改后块前向指针IntToBin(0, &mmp + 4); /清空本块大小五实验结果1 .实现的两种分配策略:first-fit 和 next-fit2. 设计测试程序,收集实验数据:First-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 13818-1:2025 EN Information technology - Generic coding of moving pictures and associated audio information - Part 1: Systems
- 风机及箱变安装方案
- XX区学校艺术教育工作自评总结
- 河南特岗医生考试真题及答案
- 食品生产高级考试题型及答案
- 2025年江北联考数学真题及答案
- XX市生态环境局XX分局2025年下半年巩固拓展脱贫攻坚成果同乡村振兴有效衔接工作情况报告
- 2025年宜宾驾校考试题库及答案
- 国贸信用证考试题及答案
- 性格功能测试题目及答案
- 2025年抗菌药培训考试题及答案
- GB/T 21782.4-2025粉末涂料第4部分:爆炸下限的计算
- 冀教版(2024)数学一年级上册第三单元《认识11~20》综合计算练习卷(含解析)
- 横河CS3000工程师培训资料
- 2023城镇排水管道碎(裂)管法修复工程技术规程
- 工程材料询价(核价)单
- 清华大学出版社机械制图习题集参考答案(课堂PPT)
- 颈动脉狭窄的护理
- 国际机场机坪车辆行驶管理手册
- 测井解释与生产测井-吴锡令生产测井原理与应用
- 去极端化思想课件
评论
0/150
提交评论