📄 mm_5.c
字号:
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 + -