Skip to content

Commit c5ec88c

Browse files
author
Wei Li
committed
size order
1 parent e3c0c73 commit c5ec88c

File tree

1 file changed

+27
-4
lines changed
  • malloclab-handout

1 file changed

+27
-4
lines changed

malloclab-handout/mm.c

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
#endif
2525

2626

27-
#define FIFO
27+
#define SIZE_ORDER
2828
#ifdef LIFO
2929
#define insert_free_block insert_free_block_lifo
3030
#elif defined(FIFO)
3131
#define insert_free_block insert_free_block_fifo
3232
#elif defined(ADDRESS_ORDER)
3333
#define insert_free_block insert_free_block_address_order
34+
#elif defined(SIZE_ORDER)
35+
#define insert_free_block insert_free_block_size_order
3436
#else
3537
#define insert_free_block insert_free_block_lifo
3638
#endif
@@ -210,9 +212,28 @@ inline static void insert_free_block_address_order(void *bp)
210212
*/
211213
inline static void insert_free_block_lifo(void *bp)
212214
{
213-
size_t size = GET_SIZE(HDRP(bp));
214-
void *class_ptr = get_class_ptr(size);
215-
insert_free_block_after(class_ptr, bp);
215+
size_t size = GET_SIZE(HDRP(bp));
216+
void *class_ptr = get_class_ptr(size);
217+
insert_free_block_after(class_ptr, bp);
218+
}
219+
220+
221+
/*
222+
* insert according to size order
223+
*/
224+
225+
inline static void insert_free_block_size_order(void *bp)
226+
{
227+
size_t size = GET_SIZE(HDRP(bp));
228+
void *class_ptr = get_class_ptr(size);
229+
void *cur_bp;
230+
for_each_free_block(class_ptr, cur_bp) {
231+
size_t cur_size = GET_SIZE(HDRP(bp));
232+
if (cur_size >= size) {
233+
break;
234+
}
235+
}
236+
insert_free_block_after(PRED_BLKP(cur_bp), bp);
216237
}
217238

218239
/*
@@ -754,9 +775,11 @@ void mm_checkheap(int lineno)
754775
CHECK_GREATER_EQUAL(GET_SIZE(HDRP(bp)), min_class_size, lineno,
755776
"free block size in class range(min size)");
756777

778+
#ifdef ADDRESS_ORDER
757779
// if blocks are inserted in address order, check address order
758780
CHECK_LESS(PRED_BLKP(bp), bp, lineno,
759781
"address order for each free list");
782+
#endif
760783
}
761784
}
762785

0 commit comments

Comments
 (0)