📄 内存分配.cpp
字号:
/*
~~~HOHO
ztg;
*/
#include<iostream>
#include<string>
using namespace std;
#define max 100
struct memory
{
int id;
int size;
int start;
};
void output(memory *m,int n)
{
int i;
cout<<"\n-------------分区表如下:"<<endl<<endl;
cout<<"\t\t分区号\t大小\t起址"<<endl;
for(i=0;i<n;i++)
{
cout<<"\t\t"<<m[i].id<<"\t"<<m[i].size<<"\t"<<m[i].start<<endl;
}
}
void bestAdapter(memory *m,int n)
{
int a,i,c;
cout<<"\n请输入有几个作业要调入内存:";
cin>>a;
cout<<endl;
while(a--)
{
cout<<"请输入要调入内存作业的大小:";
cout<<endl;
cin>>c;
int flag=m[0].size-c;
int k=0;
for(i=1;i<n;i++)
{
if((flag<0&&flag<m[i].size-c)||(flag>=0&&flag>m[i].size-c&&m[i].size-c>0))
{
flag=m[i].size-c;
// cout<<flag<<endl;
k=i;
}
}
if(flag>=0)
{
cout<<"内存分配成功"<<endl;
m[k].size-=c;
m[k].start+=c;
output(m,n);
}
else
{
output(m,n);
cout<<"内存分配失败!"<<endl;
break;
}
}
}
void loopAdapter(memory *m,int n)
{
int a,i,c;
cout<<"\n请输入有几个作业要调入内存:";
cin>>a;
cout<<endl;
int temp=0;
while(a--)
{
cout<<"请输入要调入内存作业的大小:";
cin>>c;
cout<<endl;
bool flag=false;
int count=0;
if(temp==n)temp=0;//到达队列末尾将指针移动到头部
for(i=temp;i<n;i++)
{
if(i==temp&&count)break;//指针走过一圈了
if(m[i].size>=c)
{
cout<<"内存分配成功!"<<endl;
m[i].size-=c;
m[i].start+=c;
temp=i+1;//分配内存成功后指针指向下个位置
flag=true;
output(m,n);
break;
}
else if(i==n-1)//每次指针到达尾部都要将指针指向头部并将count标记为1表示走过一圈
{
count++;
i=-1;
}
}
if(!flag)
{
output(m,n);
cout<<"内存分配失败!"<<endl;
break;
}
}
}
void firstAdapter(memory *m,int n)
{
int a,i,c;
cout<<"\n请输入有几个作业要调入内存:";
cin>>a;
cout<<endl;
while(a--)
{
cout<<"请输入要调入内存作业的大小:";
cout<<endl;
cin>>c;
for(i=0;i<n;i++)
{
if(m[i].size>=c)
{
cout<<"内存分配成功!"<<endl;
m[i].size-=c;
m[i].start+=c;
output(m,n);
break;
}
}
if(i==n)
{
output(m,n);
cout<<"内存分配失败!"<<endl;
break;
}
}
}
int main()
{
memory m[max];
cout<<"\n请输入可用内存分区个数:";
int n,i;
cin>>n;
cout<<endl;
cout<<"请输入每个分区的内存大小及其实地址:";
cout<<endl;
for(i=0;i<n;i++)
{
cin>>m[i].id>>m[i].size>>m[i].start;
}
cout<<"\n----------------------&连续分配方式&--------------------\n"<<endl;
cout<<"\n\t 1.首次适应算法FF\n";
cout<<"\t 2.循环首次适应算法\n";
cout<<"\t 3.最佳适应算法\n";
cout<<"\t 4.退出\n\n";
output(m,n);
cout<<"\n请输入要采用的分配算法的序列号";
int choice;
try
{
cin>>choice;
if(choice<1||choice>4)
{
string msg("错误的输入!");
throw(msg);
}
}
catch(string msg)
{
cout<<"\n致命错误: "<<msg<<endl;
}
switch(choice)
{
case 1:firstAdapter(m,n);break;
case 2:loopAdapter(m,n);break;
case 3:bestAdapter(m,n);break;
case 4:exit(0);
}
system("pause");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -