动态内存分配实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三、实验内容
在本实验中,我采用了循环首次适应算法和最佳适应算法。设计和实现内存 回收函数:若回收分区与其它空闲分区相邻接,则采取合 并措施小基于不同的 内存分配策略形成不同版本的内存管理器, 并根 据内存平均利用率和分配查找 分区比较次数等指标展开测试和对不 同分配策略的内存管理器性能进行评估间 长短将其与基于 Windows 互斥信号量的线程同步机制的效率展开比较。 本实 验是要做一个模拟 程序,来模拟动态分区算法的分配和回收过程,并不是真正 的去分配 和回收内存。 利用书上的提供的几个算法的工作流程去编写相应的代 码, 实现循环首次适应算法和最佳适应算法来模拟动态分区算法的分 配和回收 过程。
case 3: show();
} } return 0; }
lenth:**********\n"); scanf("%d %d",&id,&xk); allocate(id,xk); break;
case 2: printf("*********please intput the prossing name to be
reclaim:**********\n"); scanf("%d",&id); reclaim(id); break;
此部分内容说实话,上课的时候我是真的没有怎么掌握,通过此次实验, 我才明白什么是动态内存分配,以及程序在运行时是怎么分配内存的。上 课时只靠理论和仅有的一点想象能力是不够的,动手操作能力也是必需的, 最起码它让我们切身体会并明白了所要学习的知识。实验课对于大学生, 特别是对于我们即将面临毕业的大三学生是十分必要的。
Free[i].address+=len; Free[i].len-=len; } else { free_p--;
for(j=i;j<free_p;j++) {
Free[j]=Free[j+1]; } } break; } }
} void reclaim(int id) {
int i,j,k; for(i=0;i<used_p;i++) {
printf("%d %7d %7d %7d\n",i,used[i].run_id,used[i].address,used[i].len);
} printf("***********Free table:***********\n");
for(i=0;i<free_p;i++) {
printf("%d %7d %7d\n",i,Free[i].address,Free[i].len); } printf("end\n"); } int main() { int i,type,id; int xk; //空闲区表初始化 Free[0].address=10240; Free[0].len=102400; Free[0].flag=1; for(i=1;i<Max;i++)
{ Free[j].len+=Free[j + 1].len; free_p--; for(k =j + 1; k < free_p;k++) { Free[k]=Free[k+1]; }
}
}
} }
} void show() {
int i; // sort(used,used+used_p,cmp); printf("***********used table:***********\n"); for(i=0;i<used_p;i++) {
int i,j; for(i=0;i<free_p;i++) {
if(Free[i].len>=len) {
used[used_p].address=Free[i].address; used[used_p].len=len; used[used_p].run_id=id; used_p++; if(Free[i].len>len) {
四、实验结果
选择,1:分配内存,2:回收内存,3:显示内存
给进程 1 分配内存空间 100,进程 2 分配内存空间 130
显示内存: 回收内存: 回收后显示内存:
五、实验小结
所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过 程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象 数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程 序的需要即时分配,且分配的大小就是程序要求的大小
if(used[i].run_id==id) {
int add=used[i].address; int length=used[i].len; used_p--; for(j=i;j<used_p;j++) {
used[j]=used[j+1]; }
Free[free_p].address=add;
int address; int len; int flag; int run_id;
Baidu Nhomakorabea
}; table used[Max],Free[Max]; struct Process {
int id; int len; }p[Max]; int cmp(const table &a,const table &b) { return a.address<b.address; } void allocate(int id,int len) {
动态内存分配实验报告
一、实验目的
动态分区分配 弄明白动态分区的的相关概念及工作流程,让自己通过编码 来模拟实际电脑里动态分区是怎样工作的。 掌握存储管理中的动态分 区分配算 法。
二、实验要求
1.在实现关于内存管理的内存首选适应算法和最佳适用算法 两个可选一 个,但最佳适用算法必须实现。
2.实现关于内存管理的内存动态分区分配 布局初始化。 3.实现关于内存管理的内存动态分区分配 申请分配。 4.实现关于内存管理的内存回收等基本功能操作函数
Free[i].flag=0; //已分配 1 区表初始化 for(i=0;i<Max;i++)
used[i].flag=0; free_p=1; used_p=0; while(1) {
printf("**************please chose the type of the functions:**************\n 0--exit 1--allocate 2--reclaim 3--show\n");
//printf("please chose the function type\n"); scanf("%d",&type); switch(type) {
case 0: return 0;
case 1: printf("*********please input processing name and
希望以后的时间里还有机会让我们能锻炼锻炼自己,接下来还有两周的 课程设计,希望自己能把握好机会,让自己的能力,更上一层楼···
六、附录
#include<stdio.h> #include<string.h> //#include<algorithm> //using namespace std; #define Max 10 int free_p; int used_p; struct table {
Free[free_p].len=length;
free_p++;
//
sort(Free,Free+free_p,cmp);
for(j=0;j<free_p;j++)
{
1].address)
if(j + 1 < free_p&&Free[j].address+Free[j].len==Free[j +
在本实验中,我采用了循环首次适应算法和最佳适应算法。设计和实现内存 回收函数:若回收分区与其它空闲分区相邻接,则采取合 并措施小基于不同的 内存分配策略形成不同版本的内存管理器, 并根 据内存平均利用率和分配查找 分区比较次数等指标展开测试和对不 同分配策略的内存管理器性能进行评估间 长短将其与基于 Windows 互斥信号量的线程同步机制的效率展开比较。 本实 验是要做一个模拟 程序,来模拟动态分区算法的分配和回收过程,并不是真正 的去分配 和回收内存。 利用书上的提供的几个算法的工作流程去编写相应的代 码, 实现循环首次适应算法和最佳适应算法来模拟动态分区算法的分 配和回收 过程。
case 3: show();
} } return 0; }
lenth:**********\n"); scanf("%d %d",&id,&xk); allocate(id,xk); break;
case 2: printf("*********please intput the prossing name to be
reclaim:**********\n"); scanf("%d",&id); reclaim(id); break;
此部分内容说实话,上课的时候我是真的没有怎么掌握,通过此次实验, 我才明白什么是动态内存分配,以及程序在运行时是怎么分配内存的。上 课时只靠理论和仅有的一点想象能力是不够的,动手操作能力也是必需的, 最起码它让我们切身体会并明白了所要学习的知识。实验课对于大学生, 特别是对于我们即将面临毕业的大三学生是十分必要的。
Free[i].address+=len; Free[i].len-=len; } else { free_p--;
for(j=i;j<free_p;j++) {
Free[j]=Free[j+1]; } } break; } }
} void reclaim(int id) {
int i,j,k; for(i=0;i<used_p;i++) {
printf("%d %7d %7d %7d\n",i,used[i].run_id,used[i].address,used[i].len);
} printf("***********Free table:***********\n");
for(i=0;i<free_p;i++) {
printf("%d %7d %7d\n",i,Free[i].address,Free[i].len); } printf("end\n"); } int main() { int i,type,id; int xk; //空闲区表初始化 Free[0].address=10240; Free[0].len=102400; Free[0].flag=1; for(i=1;i<Max;i++)
{ Free[j].len+=Free[j + 1].len; free_p--; for(k =j + 1; k < free_p;k++) { Free[k]=Free[k+1]; }
}
}
} }
} void show() {
int i; // sort(used,used+used_p,cmp); printf("***********used table:***********\n"); for(i=0;i<used_p;i++) {
int i,j; for(i=0;i<free_p;i++) {
if(Free[i].len>=len) {
used[used_p].address=Free[i].address; used[used_p].len=len; used[used_p].run_id=id; used_p++; if(Free[i].len>len) {
四、实验结果
选择,1:分配内存,2:回收内存,3:显示内存
给进程 1 分配内存空间 100,进程 2 分配内存空间 130
显示内存: 回收内存: 回收后显示内存:
五、实验小结
所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过 程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象 数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程 序的需要即时分配,且分配的大小就是程序要求的大小
if(used[i].run_id==id) {
int add=used[i].address; int length=used[i].len; used_p--; for(j=i;j<used_p;j++) {
used[j]=used[j+1]; }
Free[free_p].address=add;
int address; int len; int flag; int run_id;
Baidu Nhomakorabea
}; table used[Max],Free[Max]; struct Process {
int id; int len; }p[Max]; int cmp(const table &a,const table &b) { return a.address<b.address; } void allocate(int id,int len) {
动态内存分配实验报告
一、实验目的
动态分区分配 弄明白动态分区的的相关概念及工作流程,让自己通过编码 来模拟实际电脑里动态分区是怎样工作的。 掌握存储管理中的动态分 区分配算 法。
二、实验要求
1.在实现关于内存管理的内存首选适应算法和最佳适用算法 两个可选一 个,但最佳适用算法必须实现。
2.实现关于内存管理的内存动态分区分配 布局初始化。 3.实现关于内存管理的内存动态分区分配 申请分配。 4.实现关于内存管理的内存回收等基本功能操作函数
Free[i].flag=0; //已分配 1 区表初始化 for(i=0;i<Max;i++)
used[i].flag=0; free_p=1; used_p=0; while(1) {
printf("**************please chose the type of the functions:**************\n 0--exit 1--allocate 2--reclaim 3--show\n");
//printf("please chose the function type\n"); scanf("%d",&type); switch(type) {
case 0: return 0;
case 1: printf("*********please input processing name and
希望以后的时间里还有机会让我们能锻炼锻炼自己,接下来还有两周的 课程设计,希望自己能把握好机会,让自己的能力,更上一层楼···
六、附录
#include<stdio.h> #include<string.h> //#include<algorithm> //using namespace std; #define Max 10 int free_p; int used_p; struct table {
Free[free_p].len=length;
free_p++;
//
sort(Free,Free+free_p,cmp);
for(j=0;j<free_p;j++)
{
1].address)
if(j + 1 < free_p&&Free[j].address+Free[j].len==Free[j +