From 3a6c721ca2a745e2932671b9bdec53c09a6ec26e Mon Sep 17 00:00:00 2001 From: Ivo van Poorten <ivopvp@gmail.com> Date: Tue, 10 Sep 2024 04:20:03 +0200 Subject: [PATCH] zmalloc: also add alloc at begin of first fit to test differences in speed and memory fragmentation. alloc at end is faster during loading. no data yet on memory fragmentation. --- lib/zmalloc.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/zmalloc.c b/lib/zmalloc.c index aaa9f617..63dad265 100644 --- a/lib/zmalloc.c +++ b/lib/zmalloc.c @@ -45,7 +45,20 @@ void *zmalloc(size_t size) { for (p = base; p && !(p->free && p->size >= size); p = p->next) ; // find if (!p) return NULL; - if (p->size - size > block_info_size) { // split, alloc at end + if (p->size - size > block_info_size) { +#if 0 + // split, alloc at begin + struct block_info *q = (void *) p + block_info_size + size; + q->next = p->next; + p->next = q; + q->prev = p; + if (q->next) q->next->prev = q; + q->size = p->size - block_info_size - size; + p->size = size; + q->free = 1; +#endif +#if 1 + // split, alloc at end struct block_info *q = (void *) p + p->size - size; p->size -= size + block_info_size; q->size = size; @@ -54,6 +67,7 @@ void *zmalloc(size_t size) { q->prev = p; if (q->next) q->next->prev = q; p = q; +#endif } p->free = 0;