⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 内存分配.cpp

📁 操作系统内存分配程序 简单实用 代码简短易懂
💻 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 + -