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

📄 mm_5.c

📁 ICS 课程的Lab7
💻 C
📖 第 1 页 / 共 2 页
字号:
        else if(pre!=NULL && next==NULL)        {            PUT(NEXT(pre),(int)NULL);                        PUT(header,(int)bp);            PUT(NEXT(bp),(int)header);            PUT(bp,(int)NULL);                        header=bp;                               }        else if (pre==NULL && next!=NULL)            {                PUT(next,(int)bp);                                PUT(bp,(int)NULL);                PUT(NEXT(bp),(int)next);                header=bp;                                           }        else        {            PUT(NEXT(pre),(int)next);            PUT(next,(int)pre);                        PUT(header,(int)bp);            PUT(NEXT(bp),(int)header);            PUT(bp,(int)NULL);            header=bp;                    }        //return header;            }else    {       void  *current1=PREV_BLKP(bp);       void  *pre1 = (void *)(GET(current1));       void  *next1=(void *)(GET(NEXT(current1)));       void  *current2=NEXT_BLKP(bp);       void  *pre2 = (void *)(GET(current2));       void  *next2=(void *)(GET(NEXT(current2)));       PUT(current1,(int)NULL);       PUT(NEXT(current1),(int)NULL);              PUT(current2,(int)NULL);       PUT(NEXT(current2),(int)NULL);                size += GET_SIZE(HDRP(PREV_BLKP(bp))) + GET_SIZE(FTRP(NEXT_BLKP(bp)));        PUT(HDRP(PREV_BLKP(bp)),PACK(size,0));        PUT(FTRP(NEXT_BLKP(bp)),PACK(size,0));        bp=PREV_BLKP(bp);        if(pre1==current2)        {                        if(pre2==NULL && next1==NULL)            {                PUT(bp,(int)NULL);                PUT(NEXT(bp),(int)NULL);                                header=bp;                            }            else if(pre2!=NULL && next1==NULL)            {                PUT(NEXT(pre2),(int)NULL);                                PUT(bp,(int)NULL);                PUT(header, (int)bp);                                PUT(NEXT(bp),(int)header);                header=bp;                            }            else if(pre2==NULL && next1!=NULL)            {                PUT(NEXT(bp),(int)next1);                                PUT(next1,(int)bp);                PUT(bp,(int)NULL);                                header=bp;                                            }            else             {                PUT(NEXT(pre2),(int)next1);                PUT(next1,(int)pre2);                                PUT(header,(int)bp);                PUT(NEXT(bp),(int)header);                                PUT(bp,(int)NULL);                                header=bp;            }	    // return header;                    }else if(pre2==current1)        {            if(pre1==NULL && next2==NULL)            {                 PUT(bp,(int)NULL);                 PUT(NEXT(bp),(int)NULL);                                  header=bp;            }            else if(pre1!=NULL && next2==NULL)            {                PUT(NEXT(pre1),(int)NULL);                                PUT(header,(int)bp);                PUT(bp,(int)NULL);                                PUT(NEXT(bp),(int)header);                                header=bp;                            }            else if(pre1==NULL && next2!=NULL)            {                PUT(next2,(int)bp);                PUT(NEXT(bp),(int)next2);                PUT(bp,(int)NULL);                                header=bp;            }            else            {                                PUT(NEXT(pre1),(int)next2);                PUT(next2,(int)pre1);                                PUT(header,(int)bp);                PUT(bp,(int)NULL);                PUT(NEXT(bp),(int)header);                                header=bp;                                     }	    // return header;                                }        else        {            if(pre1==NULL)            {                if(next2==NULL)                {                    PUT(NEXT(pre2),(int)NULL);                                                        }                else                {                    PUT(NEXT(pre2),(int)next2);                    PUT(next2,(int)pre2);                }                                PUT(bp,(int)NULL);                PUT(NEXT(bp),(int)next1);                PUT(next1,(int)bp);                                header=bp;                                            }            else if(pre2==NULL)            {                if(next1==NULL)                {                    PUT(NEXT(pre1),(int)NULL);                                    }                else                {                    PUT(NEXT(pre1),(int)next1);                    PUT(next1,(int)pre1);                                  }                                PUT(bp,(int)NULL);                PUT(next2,(int)bp);                PUT(NEXT(bp),(int)next2);                header=bp;                                            }            else            {                if(next1==NULL)                {                    PUT(NEXT(pre2),(int)next2);                    PUT(next2,(int)pre2);                    PUT(NEXT(pre1),(int)NULL);                }                else if (next2==NULL)                {                    PUT(NEXT(pre1),(int)next1);                    PUT(next1,(int)pre1);                                        PUT(NEXT(pre2),(int)NULL);                }                else                {                     PUT(NEXT(pre2),(int)next2);                     PUT(next2,(int)pre2);                                          PUT(NEXT(pre1),(int)next1);                     PUT(next1,(int)pre1);                                    }                PUT(bp,(int)NULL);                PUT(header,(int)bp);                                PUT(NEXT(bp),(int)header);                header=bp;                                           }               	    // return header;                  }            }        if (largest_size < GET_SIZE(HDRP(header)))    {	largest_size = GET_SIZE(HDRP(header));	largest_changed = 0;	largest_ptr = header;    }    return header;}static void *find_fit(size_t asize){    void *bp;           //to find the poperiate fit              for(bp=header;bp!=NULL;bp=(void *)(GET(NEXT(bp))))    {                   if(asize<=GET_SIZE(HDRP(bp)))            {                              return bp;            }                        //  printf("the bad pointer is %p\n",bp);    }        return NULL;}static void place(void *bp,size_t asize){    size_t csize = GET_SIZE(HDRP(bp));    void *next=(void *)(GET(NEXT(bp)));    void *pre=(void *)(GET(bp));        if (GET_SIZE(HDRP(bp)) >= largest_size)	largest_changed = 1;        PUT(bp,(int)NULL);    PUT(NEXT(bp),(int)NULL);    if((csize - asize) >= (DSIZE + OVERHEAD))    {        PUT(HDRP(bp),PACK(asize,1));        PUT(FTRP(bp),PACK(asize,1));        bp=NEXT_BLKP(bp);        PUT(HDRP(bp),PACK(csize - asize ,0));        PUT(FTRP(bp),PACK(csize - asize ,0));        if(pre!=NULL && next!=NULL)        {                        PUT(NEXT(pre),(int)next);            PUT(next,(int)pre);                        PUT(NEXT(bp),(int)header);            PUT(header,(int)bp);            PUT(bp,(int)NULL);                        header=bp;        }        else if(pre==NULL && next!=NULL)        {            PUT(bp,(int)NULL);                        PUT(NEXT(bp),(int)next);            PUT(next,(int)bp);            header=bp;        }        else if (pre!=NULL && next==NULL)        {            PUT(NEXT(pre),(int)NULL);                        PUT(bp,(int)NULL);            PUT(NEXT(bp),(int)header);            PUT(header,(int)bp);            header=bp;                    }        else        {            PUT(bp,(int)NULL);            PUT(NEXT(bp),(int)NULL);            header=bp;                    }    }    else    {        PUT(HDRP(bp),PACK(csize,1));        PUT(FTRP(bp),PACK(csize,1));                if(pre!=NULL && next!=NULL)        {            PUT(NEXT(pre),(int)next);            PUT(next,(int)pre);        }        else if(pre==NULL && next!=NULL)        {            header=next;            PUT(header,(int)NULL);                    }        else if(pre!=NULL && next==NULL)        {            PUT(NEXT(pre),(int)NULL);        }        else        {            header=NULL;                  }                            }        }static void copy(void *aim,void * from,size_t size){    int j;    for (j = 0; j < size; j++)	*((char *) aim + j) = 0;}

⌨️ 快捷键说明

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