| | |
| | | static void *place(void *bp, size_t size); |
| | | static void *find_fit(size_t size); |
| | | static void *coalesce(void *bp); |
| | | static void rm_fblock(void *bp); |
| | | static inline void rm_fblock(void *bp); |
| | | static void insert_fblock (void *bp); |
| | | |
| | | static void *mem_sbrk(int incr); |
| | |
| | | SemUtil::inc(mutex); |
| | | return aptr; |
| | | } else { |
| | | SemUtil::inc(mutex); |
| | | err_msg(0, "mm_malloc : out of memery\n"); |
| | | return NULL; |
| | | } |
| | |
| | | *} |
| | | */ |
| | | |
| | | |
| | | size_t size = GET_SIZE(HDRP(ptr)); |
| | | SemUtil::dec(mutex); |
| | | size_t size = GET_SIZE(HDRP(ptr)); |
| | | PUT(HDRP(ptr), PACK(size, 0)); |
| | | PUT(FTRP(ptr), PACK(size, 0)); |
| | | coalesce(ptr); |
| | |
| | | /** |
| | | * remove a block form free list |
| | | */ |
| | | static void rm_fblock(void *rbp) |
| | | static inline void rm_fblock(void *rbp) |
| | | { |
| | | // the successor of the previous block of rbp point to next block of rbp |
| | | |
| | | PUT_PTR(SUCCRP(PREV_FBLKP(rbp)), NEXT_FBLKP(rbp)); |
| | | // the predecessor of then next block of rbp point to previous block of rbp |
| | | PUT_PTR(PREDRP(NEXT_FBLKP(rbp)), PREV_FBLKP(rbp)); |