正在加载图片...
第八章动态存储管理 8.11 typedef struct i har *start enblock,∥空闲块类型 char* Malloc_Fdlf( int n)遵循最后分配者最先释放规则的内存分配算法 while( Gettop(s, b)&&b size<n) Pop(s, b) Push(T,b),∥从栈顶逐个取出空闲块进行比较 if( Stack Empty(S) return NULL,∥没有大小足够的空闲块 Pop(s, b) bsize. if(b size)Push(S,b. start+n b size})/分割空闲块 while(!stack Empty T) Popt Push(s, a }/恢复原来次序 eturn b start i//Malloc ldIf mem inito/初始化过程 Init Stack(S) InitStack(T,/S和T的元素都是 enblock类型 Push(S,{ MemStart emlEn}),∥一开始栈中只有一个内存整块 nain 8.12 void Free FdIf(char* addr int n)/与上一题对应的释放算法 while(Gettop(s, b )&&b start <addr) Pop(s, b); Push(t, b)第八章 动态存储管理 8.11 typedef struct { char *start; int size; } fmblock; //空闲块类型 char *Malloc_Fdlf(int n)//遵循最后分配者最先释放规则的内存分配算法 { while(Gettop(S,b)&&b.size<n) { Pop(S,b); Push(T,b); //从栈顶逐个取出空闲块进行比较 } if(StackEmpty(S)) return NULL; //没有大小足够的空闲块 Pop(S,b); b.size-=n; if(b.size) Push(S,{b.start+n,b.size});//分割空闲块 while(!StackEmpty(T)) { Pop(T,a); Push(S,a); } //恢复原来次序 return b.start; }//Malloc_Fdlf mem_init()//初始化过程 { ... InitStack(S);InitStack(T); //S 和 T 的元素都是 fmblock 类型 Push(S,{MemStart,MemLen}); //一开始,栈中只有一个内存整块 ... }//main 8.12 void Free_Fdlf(char *addr,int n)//与上一题对应的释放算法 { while(Gettop(S,b)&&b.start<addr) { Pop(S,b); Push(T,b);
向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有