From 18bc06645dc0b4e5548990ed5bb9f726dbba01d6 Mon Sep 17 00:00:00 2001 From: GentleCold <1952173800@qq.com> Date: Thu, 29 Dec 2022 23:48:11 +0800 Subject: [PATCH] mm malloc v1.1 - 66 --- labs/malloclab_lab/mdriver | Bin 42816 -> 43180 bytes labs/malloclab_lab/mm.c | 38 +++++++++++++++++++------------------- labs/malloclab_lab/mm.o | Bin 17584 -> 17876 bytes labs/malloclab_lab/solve_note.md | 25 +++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/labs/malloclab_lab/mdriver b/labs/malloclab_lab/mdriver index ad53776447e3269d6d32a02499f755db016475b5..bd8b7ce1b0919dc80da121059a4c3043b374ef64 100644 GIT binary patch delta 9986 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 S+Men>_7r~BVj2Qhp!)yb8-#-Z delta 9616 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 FSIZE) { - _place(ptr, adjust_size); // just cut - if (NEXT(ptr) != tail_p && !ALLOC(NEXT(NEXT(ptr)))) __coalesce_next(NEXT(ptr)); - } + // just return, for the memory lost is little return ptr; + } + size_t next_size = (ptr != tail_p && !ALLOC(NEXT(ptr))) ? SIZE(NEXT(ptr)) + DSIZE : 0; + size_t total_size = old_size + next_size; + if (adjust_size <= total_size) { + new_ptr = __coalesce_next(ptr); + _place(new_ptr, adjust_size); // just cut + return new_ptr; + } + size_t prev_size = (ptr != front_p && !ALLOC(PREV(ptr))) ? SIZE(PREV(ptr)) + DSIZE : 0; + total_size += prev_size; + if (adjust_size <= total_size) { // coalesce prev or all + new_ptr = _coalesce(ptr); + memmove(new_ptr, ptr, old_size); + _place(new_ptr, adjust_size); } else { - if (ptr != tail_p && !ALLOC(NEXT(ptr)) && SIZE(ptr) + SIZE(NEXT(ptr)) + DSIZE >= adjust_size) { - if (NEXT(ptr) == tail_p) tail_p = ptr; - size_t new_size = SIZE(ptr) + SIZE(NEXT(ptr)) + DSIZE; - SET(HEAD(ptr), PACK(new_size, 1)); - SET(FOOT(ptr), PACK(new_size, 1)); - if (SIZE(ptr) - adjust_size >= FSIZE) { - _place(ptr, adjust_size); - } - return ptr; - } - if ((new_ptr = mm_malloc(size)) == NULL) return NULL; - memcpy(new_ptr, ptr, old_size); + memmove(new_ptr, ptr, old_size); mm_free(ptr); - return new_ptr; } + return new_ptr; } // my func diff --git a/labs/malloclab_lab/mm.o b/labs/malloclab_lab/mm.o index fd45e145b4f9d97bcd4ff8f137640cd4accb0627..d450ea2a81fe6198ddd023eb8148fbf37104ec6a 100644 GIT binary patch literal 17876 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 literal 17584 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 Op2WDFwh%JA`Tqdq{Cc$j diff --git a/labs/malloclab_lab/solve_note.md b/labs/malloclab_lab/solve_note.md index a9e2bd3..972dfb0 100644 --- a/labs/malloclab_lab/solve_note.md +++ b/labs/malloclab_lab/solve_note.md @@ -60,5 +60,30 @@ Perf index = 47 (util) + 13 (thru) = 60/100 #### 针对 `realloc` 的优化 v2 * 评估前后空闲块的总大小,若足够,则合并 * 合并不会破坏数据,合并后复制数据,再根据需要分割 +* 然而针对第九项测试,合并前后空闲块反而内存利用率低于仅合并后空闲块 +#### 针对 `realloc` 的优化 v3 +* 最终选择的是逐步的过程,因为从时间开销上来看,直接返回优于仅合并后部分优于合并前后部分,但同时合并前后部分与再分配一段内存的优劣不好比较 +* 现在的问题是在仅合并后部分和重新分配之间要不要插一段合并前后部分的条件,两者分数相同,个人认为插入这个条件通用性更好 +#### 得分 +```c +Results for mm malloc: +trace valid util ops secs Kops + 0 yes 99% 5694 0.007401 769 + 1 yes 100% 5848 0.006883 850 + 2 yes 99% 6648 0.011138 597 + 3 yes 100% 5380 0.008327 646 + 4 yes 100% 14400 0.000092156013 + 5 yes 92% 4800 0.006244 769 + 6 yes 92% 4800 0.005888 815 + 7 yes 55% 12000 0.142196 84 + 8 yes 51% 24000 0.277304 87 + 9 yes 50% 14401 0.018129 794 +10 yes 86% 14401 0.000132108933 +Total 84% 112372 0.483734 232 + +Perf index = 50 (util) + 15 (thru) = 66/100 +``` +## Version 1.2 + *** 2022.12.29 ~ 2022.12.30 \ No newline at end of file