From 1b8b22fbdf1e926364b93c52f6df9581b7bd810e Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 16 Feb 2017 18:10:01 +0100 Subject: [PATCH] free() done, coalescing done --- malloc/Makefile | 3 +- malloc/includes/malloc.h | 1 + malloc/libft_malloc_x86_64_Darwin.so | Bin 38876 -> 11536 bytes malloc/main.c | 33 ++++++++++++------- malloc/myprogram | Bin 8648 -> 8640 bytes malloc/src/free.c | 46 +++++++++++++++++++++++++-- malloc/src/insert_node.c | 16 ++++++++++ malloc/src/malloc.c | 22 +++---------- malloc/src/show_alloc_mem.c | 12 +++---- 9 files changed, 94 insertions(+), 39 deletions(-) create mode 100644 malloc/src/insert_node.c diff --git a/malloc/Makefile b/malloc/Makefile index 2b404140..0304ea74 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -21,6 +21,7 @@ OBJ_DIR = objs/ SRC_BASE = \ free.c\ +insert_node.c\ malloc.c\ show_alloc_mem.c @@ -79,7 +80,7 @@ re: fclean all relib: fcleanlib $(LIBFT_LIB) test: - gcc -lft_malloc -L. -Iincludes -o myprogram main.c $(FLAGS) + gcc -lft_malloc -L. -Iincludes -o myprogram main.c .PHONY : fclean clean re relib cleanlib fcleanlib diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index 13526d2e..b9725805 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -36,5 +36,6 @@ void *malloc(size_t size); void *realloc(void *ptr, size_t size); void show_alloc_mem(void); void show_free_mem(void); +void insert_node(t_node **head, t_node *new); #endif diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so index 541b837859924acfc97225780df32a7c691c9f87..4ef82e3d186d33d4081c0591a29e2189523e1ec6 100755 GIT binary patch literal 11536 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 Isk5^G0bkr5&Hw-a diff --git a/malloc/main.c b/malloc/main.c index 3b962dbd..28cbc7bc 100644 --- a/malloc/main.c +++ b/malloc/main.c @@ -2,26 +2,37 @@ int main(void) { - void *ptr; - printf("pagesize=[%i]\n", getpagesize()); printf("sizeof(long)=[%lu]\n", sizeof(long)); printf("sizeof(t_node)=[%lu]\n", sizeof(t_node)); - ptr = malloc(1 * sizeof(long)); - show_alloc_mem(); - ft_putchar('\n'); - ptr = malloc(84 * sizeof(long)); + void *ptr0 = malloc(16 * sizeof(long)); show_alloc_mem(); - ft_putchar('\n'); + printf("\n"); - ptr = malloc(65 * sizeof(long)); + void *ptr1 = malloc(32 * sizeof(long)); show_alloc_mem(); - ft_putchar('\n'); + printf("\n"); - ptr = malloc(64 * sizeof(long)); + /* void *ptr2 = malloc(64 * sizeof(long)); */ + /* show_alloc_mem(); */ + /* printf("\n"); */ + + /* void *ptr3 = malloc(20 * sizeof(long)); */ + /* show_alloc_mem(); */ + /* printf("\n"); */ + + free(ptr0); show_alloc_mem(); - ft_putchar('\n'); + printf("\n"); + + free(ptr1); + show_alloc_mem(); + printf("\n"); + + /* free(ptr2); */ + /* show_alloc_mem(); */ + /* printf("\n"); */ return (0); } diff --git a/malloc/myprogram b/malloc/myprogram index e3d378bfd5ecb778d6240e57d22e51eecb1bf595..23304706e81d9c0491c064854b4405fe5c0defab 100755 GIT binary patch delta 531 zcmX|6-z!5=96!hPfYdGz9#-V4Ns{rj2VJ(-X-i7sMOt|%n(@|t)yKVO z>=(~S2`iX1-S7u~nkKTWbT8<`I^di=gIiE;54brU-Am4%z)u6uEu(S8SxIgH3vyPG z>qwGjGxVXg3Mz+pz}CH-BP5PBDQ8vf4FGC0sMcZ?&Tgd_xD23?G%o-kW~kO;lCx`R zVBDqRT@`l%^cOih=Y?S6#2Y$JS*{9rmh0W#ANKyV_qPc!l58yk_{J?)4losgMP6Sl z%ZfB2D%r0x!$VTJdJeW(StQ zfi`p=+raSR4ur1<?q0L9k<**n3?&Ud;#dC?0} z*6I4;MHi5dlE=F2LD&x z38W{0EN6K6?EnA&8A2e|9S}next; + return (0); + } + head = &(*head)->next; + } + return (1); +} + +int coalesce_nodes(t_node **head) +{ + while (*head) + { + if ((*head)->next == *(void**)head + 8 * (*head)->size) + { + (*head)->size += (*head)->next->size; + (*head)->next = (*head)->next->next; + } + else + head = &(*head)->next; + } + return (0); +} + void free(void *ptr) { - t_header *hptr; + t_node **zone_ref; + t_node **alloc_ref; + t_node *hptr; - hptr = ptr - sizeof(t_header); - ft_printf("hptr->magic = [%i]\n", hptr->magic); + hptr = ptr - 8 * HEADER_SIZE; + zone_ref = TINY(hptr->size) ? &tiny_zone : &small_zone; + alloc_ref = TINY(hptr->size) ? &tiny_alloc : &small_alloc; + /* printf("ptr @ [%p]\n", ptr); */ + /* printf("hptr @ [%p]\n", hptr); */ + /* printf("len=[%i]\n", hptr->size); */ + if (remove_node(alloc_ref, hptr)) + printf("trying to free bad address"); + insert_node(zone_ref, hptr); + hptr->size += HEADER_SIZE; + coalesce_nodes(zone_ref); } diff --git a/malloc/src/insert_node.c b/malloc/src/insert_node.c new file mode 100644 index 00000000..ff9adf4a --- /dev/null +++ b/malloc/src/insert_node.c @@ -0,0 +1,16 @@ +#include "malloc.h" + +void insert_node(t_node **head, t_node *new) +{ + while (*head) + { + if (new < *head) + { + new->next = *head; + *head = new; + return ; + } + head = &(*head)->next; + } + *head = new; +} diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c index 759c9b21..58311c28 100644 --- a/malloc/src/malloc.c +++ b/malloc/src/malloc.c @@ -22,21 +22,6 @@ void add_chunk(t_node **node_ref, size_t size) (*node_ref)->next = NULL; } -void mem_insert(t_node **head, t_node *new) -{ - while (*head) - { - if (new < *head) - { - new->next = *head; - *head = new; - return ; - } - head = &(*head)->next; - } - *head = new; -} - void *split_node(t_node **free, t_node **alloc, size_t size) { t_node *new_alloc; @@ -45,15 +30,16 @@ void *split_node(t_node **free, t_node **alloc, size_t size) free_size = (*free)->size; /* printf("split now size=[%zu]\n", size); */ /* printf("free @ [%p], size=[%i]\n", *free, (*free)->size); */ - /* printf("size + sizeof = [%lu]\n", size + HEADER_SIZE); */ + /* printf("size = [%lu]\n", size + HEADER_SIZE); */ /* printf("alloc @ [%p]\n", *alloc); */ /* fflush(stdout); */ new_alloc = *free; *(void**)free += 8 * (size + HEADER_SIZE); + /* printf("free @ [%p], size=[%i]\n", *free, (*free)->size); */ (*free)->size = free_size - (size + HEADER_SIZE); new_alloc->size = size; - mem_insert(alloc, new_alloc); - return (*alloc + HEADER_SIZE); + insert_node(alloc, new_alloc); + return ((void*)new_alloc + HEADER_SIZE * 8); } void *malloc(size_t size) diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c index c160db0f..d2dc2526 100644 --- a/malloc/src/show_alloc_mem.c +++ b/malloc/src/show_alloc_mem.c @@ -13,7 +13,7 @@ void print_free_mem(t_node *node) size = node->size; addr = (void*)node; printf("\t%p - %p : %4zu byte%c\n", - addr, addr + 8 * size, size, size > 1 ? 's' : 0); + addr, (void*)addr + 8 * size, size, size > 1 ? 's' : 0); } void print_alloc_mem(t_node *node) @@ -22,9 +22,9 @@ void print_alloc_mem(t_node *node) void *addr; size = node->size; - addr = (void*)node + HEADER_SIZE; + addr = (void*)node + 8 * HEADER_SIZE; printf("\t%p - %p : %4zu(+%zu) byte%c\n", - addr, addr + 8 * size, size, HEADER_SIZE, size > 1 ? 's' : 0); + addr, (void*)addr + 8 * size, size, HEADER_SIZE, size > 1 ? 's' : 0); } int show_zone(t_node *node, int is_free) @@ -35,7 +35,7 @@ int show_zone(t_node *node, int is_free) while (node) { is_free ? print_free_mem(node) : print_alloc_mem(node); - total += node->size + HEADER_SIZE; + total += node->size + (is_free ? 0 : HEADER_SIZE); node = node->next; } return (total); @@ -48,14 +48,14 @@ void show_alloc_mem(void) free_total = 0; alloc_total = 0; - if (tiny_alloc) + if (tiny_alloc || tiny_zone) ft_putstr("TINY:"); ft_putstr(FG_RED); alloc_total += show_zone(tiny_alloc, 0); ft_putstr(FG_GREEN); free_total += show_zone(tiny_zone, 1); ft_putstr(FG_DEFAULT); - if (small_alloc) + if (small_alloc || small_zone) ft_putstr("SMALL:"); ft_putstr(FG_RED); alloc_total += show_zone(small_alloc, 0);