From 9be740f2c06cf729e4462c02c255e7d58f36eb55 Mon Sep 17 00:00:00 2001 From: gbrochar Date: Tue, 12 Aug 2025 12:33:23 +0200 Subject: [PATCH] clean: malloc small tiny dry --- src/malloc.c | 79 ++++++---------------------------------------------- 1 file changed, 8 insertions(+), 71 deletions(-) diff --git a/src/malloc.c b/src/malloc.c index 85fa725..434824b 100644 --- a/src/malloc.c +++ b/src/malloc.c @@ -14,9 +14,7 @@ t_zone *create_new_zone(size_t size) { return zone; } -void *malloc_tiny(size_t size) { - t_zone *zone = g_zones.tiny_zones; - +void *malloc_block(size_t size, size_t zone_size, t_zone *zone) { while (1) { t_block *curr = zone->head; if (curr == NULL) { @@ -27,16 +25,6 @@ void *malloc_tiny(size_t size) { } zone->head = (t_block *)addr; curr = zone->head; -/* ft_printf("addr of g_zones.tiny_zones : %p\n" - "addr of zone : %p\n" - "addr of *head %p\n" - "sizeof tzone : %d\n" - "size of tblock %d\n", - g_zones.tiny_zones, - zone, - curr, - sizeof(t_zone), - sizeof(t_block));*/ curr->size = size; curr->free = 0; curr->next = NULL; @@ -53,7 +41,7 @@ void *malloc_tiny(size_t size) { if ((addr + sizeof(t_block)) % 16 != 0) { addr += 16 - ((addr + sizeof(t_block)) % 16); } - if (((size_t)zone + g_zones.tiny_zone_size) - addr >= size + sizeof(t_block) + (16 - sizeof(t_block) % 16)) + if (((size_t)zone + zone_size) - addr >= size + sizeof(t_block) + (16 - sizeof(t_block) % 16)) { curr->next = (t_block *)addr; curr = curr->next; @@ -64,7 +52,7 @@ void *malloc_tiny(size_t size) { return (void *)((char *)curr + sizeof(t_block)); } if (zone->next == NULL) { - zone->next = create_new_zone(g_zones.tiny_zone_size); + zone->next = create_new_zone(zone_size); } zone = zone->next; } @@ -73,63 +61,12 @@ void *malloc_tiny(size_t size) { return NULL; } -void *malloc_small(size_t size) { - t_zone *zone = g_zones.small_zones; +void *malloc_tiny(size_t size) { + return malloc_block(size, g_zones.tiny_zone_size, g_zones.tiny_zones); +} - while (1) { - t_block *curr = zone->head; - if (curr == NULL) { - // TODO size_t should be replaced by char * for pointer arithmetic - size_t addr = ((size_t)zone + sizeof(t_zone)); - if ((addr + sizeof(t_block)) % 16 != 0) { - addr += 16 - ((addr + sizeof(t_block)) % 16); - } - zone->head = (t_block *)addr; - curr = zone->head; - /*ft_printf("addr of g_zones.small_zones : %p\n" - "addr of zone : %p\n" - "addr of *head %p\n" - "sizeof tzone : %d\n" - "size of tblock %d\n", - g_zones.small_zones, - zone, - curr, - sizeof(t_zone), - sizeof(t_block));*/ - curr->size = size; - curr->free = 0; - curr->next = NULL; - ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block))); - return (void *)((char *)(curr) + sizeof(t_block)); - } - else { - while (curr->next) { - // todo check if free and defrag - curr = curr->next; - } - // TODO size_t should be replaced by char * for pointer arithmetic - size_t addr = (size_t)curr + sizeof(t_block) + curr->size; - if ((addr + sizeof(t_block)) % 16 != 0) { - addr += 16 - ((addr + sizeof(t_block)) % 16); - } - if (((size_t)zone + g_zones.small_zone_size) - addr >= size + sizeof(t_block) + (16 - sizeof(t_block) % 16)) - { - curr->next = (t_block *)addr; - curr = curr->next; - curr->size = size; - curr->free = 0; - curr->next = NULL; - ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block))); - return (void *)((char *)curr + sizeof(t_block)); - } - if (zone->next == NULL) { - zone->next = create_new_zone(g_zones.small_zone_size); - } - zone = zone->next; - } - } - ft_printf("ITS A BIG MISTAKE IF IT EVER GOES THERE WHILE TRYING TO ALLOCATE A SMALL BLOCK THAT WOULD BE A HUGE BUMMER AND WOULD MAKE THE HEADLINES OF INTERNATIONAL NEWS FOR A WEEK\n"); - return NULL; +void *malloc_small(size_t size) { + return malloc_block(size, g_zones.small_zone_size, g_zones.small_zones); } void *malloc_large(size_t size) {