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

📄 内存管理.cpp

📁 C++编写的一个操作系统程序
💻 CPP
字号:
 #include<iostream.h> 
 #include<conio.h> 
  class list; 
  class node{ 
  friend class list; 
  public: 
 node(int a=0,int b=0,node*next=NULL):data(a),size(b),link(next){} 
  
  private: 
  int data;   
  int size; 
  node *link;   
  }; 
  
  
  class list{ 
  public: 
  list():last(NULL),first(NULL){} 
  ~list(); 
  int insert(int x,int y,int i);   
  int judg(int b); 
  int judgg(int x); 
 int jia(int jia); 
  int jiaa(int jiaa); 
  int remove(int a); 
  int find(int value); 
  int judggg(); 
  int jiaaa(); 
  void print(); 
  void makeempty(){ 
    while(first!=NULL){node *q=first; 
       first=q->link;delete q; 
     } 
  } 
  private: 
  node * first; 
  node * last; 
  }; 
  
  
  list::~list(){ 
  makeempty(); 
  
  } 
  
  
  
  int list::find(int value){ 
  node *p=first; int i=0; 
  while(p!=NULL && p->data!=value){p=p->link;i++;} 
  return i; 
  } 
  
  
  
  int list::insert(int x,int y,int i){ 
  node *p=first;int k=0; 
  while(p!=NULL&&k<i-1){p=p->link;k++;} 
  if(p==NULL && first!=NULL){ 
   cout<<"出错!"<<endl; 
   return 0; 
  } 
  node* newnode=new node(x,y,NULL); 
  if(first==NULL ||  i==0){ 
  newnode->link=first; 
  if(first==NULL) last=newnode; 
  first=newnode; 
  } 
  else{ 
     newnode->link=p->link; 
  if(p->link==NULL)last=newnode; 
     p->link=newnode; 
  } 
  return 1; 
  } 
  
  int list::remove(int i){ 
  node *p=first;node *q;int k=0; 
  while(p!=NULL&&k<i-1){p=p->link;k++;} 
  if(i==0){q=first;p=first=first->link;} 
  else{q=p->link;p->link=q->link;} 
   if(q==last)last=p; 
  k=q->data;delete q;return k; 
  } 
  
  
  int list::judg(int b){int z;int zz=0; 
  if(first!=NULL){   
 node *s=first; 
       while(s!=NULL){ 
   int y=s->size;z=s->data; 
       if(y==b){int d=find(z);remove(d);zz=1;break;} 
        else if(y>b){int e=y-b;int g=find(z);                       
    int f=z+b;insert(f,e,g+1);remove(g);zz=1;break;} 
    else s=s->link; 
 } if(zz==0){cout<<"空间不足"<<endl;z='x';} 
  } 
  else{cout<<"空间不足"<<endl;z='x';} 
  return z;} 
  
  
  void list::print(){ 
 node *p=first; 
  while(p!=NULL){ 
  cout<<"起始地址:"<<p->data<<"  内存空间:"<<p->size<<endl; 
      p=p->link; 
  } 
  } 
  
  
  int list::jia(int jia){ 
  node* p=first; 
  for(int i=0;i<jia;i++){ 
  p=p->link;} 
  return p->size;} 
  
   int list::jiaa(int jiaa){ 
  node* p=first; 
  for(int i=0;i<jiaa;i++){ 
  p=p->link;} 
  return p->data;} 
  
  
  int list::judgg(int x){ 
  node *p=first;int y;int z=0; 
  while(p!=NULL){ 
  if(p->data>x){y=find(p->data);z=1;break;} 
  p=p->link; 
 }if(z==0)return -1; 
  if(z==1)return y; 
  } 

  
  int list::jiaaa(){ 
    int a=find(last->data); 
    return a; 
  } 
  
  int list::judggg(){ 
  if(first==NULL)return 0; 
  else return 1; 
  } 
  
  void main(){ 
  list a; list c;cout<<"现有一块1000的内存供分配:"<<endl; 
  a.insert(0,1000,0); 
  int n;  while(1){ 
  cout<<"请选择1:分配,2:回收"<<endl; 
  cin>>n; 
  if(n==1){cout<<"请输入你要分配的内存大小"<<endl; 
      int b;cin>>b;int x=a.judg(b);cout<<"空闲的内存:"<<endl;a.print(); 
  if(x=='x'){cout<<"运行的内存:"<<endl;c.print();} 
  else{c.insert(x,b,0);cout<<"运行的内存:"<<endl;c.print();} 
  } 
    
  if(n==2){cout<<"请输入你要结束的内存空间的首地址:"<<endl; 
    int aa;cin>>aa; 
   int bb=c.find(aa);int dd=c.jia(bb);c.remove(bb);int cc=a.judggg(); 
   if(cc==0){a.insert(aa,dd,0);} 
    else{ 
    int ee=a.judgg(aa); 
    if(ee!=-1){ 
     int hh=a.jiaa(ee); 
     int ff=a.jiaa(ee-1);int gg=a.jia(ee-1); 
     int ss=a.jia(ee);int xx=0;int zz=0; 
    if(ff+gg==aa){a.remove(ee-1);a.insert(ff,dd+gg,ee-1);xx=1; 
    if(dd+gg+ff==hh){a.insert(ff,dd+gg+ss,ee); 
    a.remove(ee+1);a.remove(ee-1);}zz=1;} 
    if(zz=0){ 
    if(aa+dd==hh){a.remove(ee);a.insert(aa,dd+ss,ee);xx=1;}} 
    if(xx==0){a.insert(aa,dd,ee);} 
  } 
    else{int aaa=a.jiaaa();int bbb=a.jia(aaa); 
    int ccc=a.jiaa(aaa);int xx=0; 
    if(ccc+bbb==aa){a.remove(aaa);a.insert(ccc,bbb+dd,aaa);xx=1;} 
    if(xx==0){a.insert(aa,dd,aaa+1);} 
    } 
    } 
    
    cout<<"空闲的内存:"<<endl;a.print(); 
    cout<<"运行的内存:"<<endl;c.print(); 
  } 
  } 
    
  getch(); 
 } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -