|
24 | 24 | #endif
|
25 | 25 |
|
26 | 26 |
|
27 |
| -#define FIFO |
| 27 | +#define SIZE_ORDER |
28 | 28 | #ifdef LIFO
|
29 | 29 | #define insert_free_block insert_free_block_lifo
|
30 | 30 | #elif defined(FIFO)
|
31 | 31 | #define insert_free_block insert_free_block_fifo
|
32 | 32 | #elif defined(ADDRESS_ORDER)
|
33 | 33 | #define insert_free_block insert_free_block_address_order
|
| 34 | +#elif defined(SIZE_ORDER) |
| 35 | + #define insert_free_block insert_free_block_size_order |
34 | 36 | #else
|
35 | 37 | #define insert_free_block insert_free_block_lifo
|
36 | 38 | #endif
|
@@ -210,9 +212,28 @@ inline static void insert_free_block_address_order(void *bp)
|
210 | 212 | */
|
211 | 213 | inline static void insert_free_block_lifo(void *bp)
|
212 | 214 | {
|
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); |
216 | 237 | }
|
217 | 238 |
|
218 | 239 | /*
|
@@ -754,9 +775,11 @@ void mm_checkheap(int lineno)
|
754 | 775 | CHECK_GREATER_EQUAL(GET_SIZE(HDRP(bp)), min_class_size, lineno,
|
755 | 776 | "free block size in class range(min size)");
|
756 | 777 |
|
| 778 | +#ifdef ADDRESS_ORDER |
757 | 779 | // if blocks are inserted in address order, check address order
|
758 | 780 | CHECK_LESS(PRED_BLKP(bp), bp, lineno,
|
759 | 781 | "address order for each free list");
|
| 782 | +#endif |
760 | 783 | }
|
761 | 784 | }
|
762 | 785 |
|
|
0 commit comments