From 5c78200d8f82d02a4b1a68912694b2b22d4763bd Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 16 Feb 2017 01:26:55 +0100 Subject: [PATCH 01/27] first commit --- malloc/.gitmodules | 3 + malloc/Makefile | 86 +++++++++++++++++++++++++++ malloc/auteur | 1 + malloc/includes/malloc.h | 34 +++++++++++ malloc/libft | 1 + malloc/libft_malloc.so | 1 + malloc/libft_malloc_x86_64_Darwin.so | Bin 0 -> 38292 bytes malloc/main.c | 13 ++++ malloc/myprogram | Bin 0 -> 8496 bytes malloc/src/free.c | 9 +++ malloc/src/malloc.c | 51 ++++++++++++++++ malloc/src/show_alloc_mem.c | 30 ++++++++++ malloc/update_makefile.sh | 17 ++++++ 13 files changed, 246 insertions(+) create mode 100644 malloc/.gitmodules create mode 100644 malloc/Makefile create mode 100644 malloc/auteur create mode 100644 malloc/includes/malloc.h create mode 160000 malloc/libft create mode 120000 malloc/libft_malloc.so create mode 100755 malloc/libft_malloc_x86_64_Darwin.so create mode 100644 malloc/main.c create mode 100755 malloc/myprogram create mode 100644 malloc/src/free.c create mode 100644 malloc/src/malloc.c create mode 100644 malloc/src/show_alloc_mem.c create mode 100755 malloc/update_makefile.sh diff --git a/malloc/.gitmodules b/malloc/.gitmodules new file mode 100644 index 00000000..49141b44 --- /dev/null +++ b/malloc/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libft"] + path = libft + url = ../libft diff --git a/malloc/Makefile b/malloc/Makefile new file mode 100644 index 00000000..2b404140 --- /dev/null +++ b/malloc/Makefile @@ -0,0 +1,86 @@ +ifeq ($(HOSTTYPE),) +HOSTTYPE := $(shell uname -m)_$(shell uname -s) +endif + +NAME = libft_malloc.so +ARCH_NAME = libft_malloc_$(HOSTTYPE).so + +CC = gcc +FLAGS = -Wall -Wextra -Werror +D_FLAGS = -g + +DELTA = $$(echo "$$(tput cols)-47"|bc) + +LIBFT_DIR = libft/ +LIBFT_LIB = $(LIBFT_DIR)libft.a +LIBFT_INC = $(LIBFT_DIR)includes/ + +SRC_DIR = src/ +INC_DIR = includes/ +OBJ_DIR = objs/ + +SRC_BASE = \ +free.c\ +malloc.c\ +show_alloc_mem.c + +SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) +OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) +NB = $(words $(SRC_BASE)) +INDEX = 0 + +all : + @make -j $(NAME) + +$(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) + @$(CC) --shared $(FLAGS) $(D_FLAGS) \ + -I $(INC_DIR) \ + -I $(LIBFT_INC) \ + $(LIBS) \ + $(LIBFT_LIB) $(OBJS) \ + -o $(ARCH_NAME) + @ln -fs $(ARCH_NAME) $(NAME) + @printf "\r\e[48;5;15;38;5;25m✅ MAKE $(ARCH_NAME)\e[0m\e[K\n" + +$(LIBFT_LIB): + @make -j -C $(LIBFT_DIR) + +$(OBJ_DIR): + @mkdir -p $(OBJ_DIR) + @mkdir -p $(dir $(OBJS)) + +$(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) + @$(eval DONE=$(shell echo $$(($(INDEX)*20/$(NB))))) + @$(eval PERCENT=$(shell echo $$(($(INDEX)*100/$(NB))))) + @$(eval COLOR=$(shell echo $$(($(PERCENT)%35+196)))) + @$(eval TO_DO=$(shell echo $$((20-$(INDEX)*20/$(NB))))) + @printf "\r\e[38;5;11m⌛ MAKE %10.10s : %2d%% \e[48;5;%dm%*s\e[0m%*s\e[48;5;255m \e[0m \e[38;5;11m %*s\e[0m\e[K" $(NAME) $(PERCENT) $(COLOR) $(DONE) "" $(TO_DO) "" $(DELTA) "$@" + @$(CC) $(FLAGS) $(D_FLAGS) -MMD -c $< -o $@\ + -I $(INC_DIR)\ + -I $(LIBFT_INC) + @$(eval INDEX=$(shell echo $$(($(INDEX)+1)))) + +clean: cleanlib + @rm -rf $(OBJ_DIR) + @printf "\r\e[38;5;202m✖ clean $(NAME).\e[0m\e[K\n" + +cleanlib: + @make -C $(LIBFT_DIR) clean + +fclean: clean fcleanlib + @rm -f $(NAME) + @printf "\r\e[38;5;196m❌ fclean $(NAME).\e[0m\e[K\n" + +fcleanlib: cleanlib + @make -C $(LIBFT_DIR) fclean + +re: fclean all + +relib: fcleanlib $(LIBFT_LIB) + +test: + gcc -lft_malloc -L. -Iincludes -o myprogram main.c $(FLAGS) + +.PHONY : fclean clean re relib cleanlib fcleanlib + +-include $(OBJS:.o=.d) diff --git a/malloc/auteur b/malloc/auteur new file mode 100644 index 00000000..b0e9923f --- /dev/null +++ b/malloc/auteur @@ -0,0 +1 @@ +jhalford diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h new file mode 100644 index 00000000..8598e563 --- /dev/null +++ b/malloc/includes/malloc.h @@ -0,0 +1,34 @@ +#ifndef MALLOC_H +# define MALLOC_H + +#define malloc_n 20 +#define malloc_m 100 +#define malloc_N 100 +#define malloc_M 500 +#define malloc_magic 1234567 +#define TINY(x) (x < (malloc_n + 1)) +#define SMALL(x) (!TINY(x) && !LARGE(x)) +#define LARGE(x) (malloc_m < x) + +#include "../libft/includes/libft.h" +#include + +typedef struct s_header { + int size; + int magic; +} t_header; + +typedef struct s_node { + int size; + struct s_node *next; +} t_node; + +extern t_node *tiny_head; +extern t_node *small_head; + +void free(void *ptr); +void *malloc(size_t size); +void *realloc(void *ptr, size_t size); +void show_alloc_mem(void); + +#endif diff --git a/malloc/libft b/malloc/libft new file mode 160000 index 00000000..b9c0c4cb --- /dev/null +++ b/malloc/libft @@ -0,0 +1 @@ +Subproject commit b9c0c4cbb1adf15f11e681951500f23ad1f34c60 diff --git a/malloc/libft_malloc.so b/malloc/libft_malloc.so new file mode 120000 index 00000000..d6d22878 --- /dev/null +++ b/malloc/libft_malloc.so @@ -0,0 +1 @@ +libft_malloc_x86_64_Darwin.so \ No newline at end of file diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so new file mode 100755 index 0000000000000000000000000000000000000000..a97431330641e2dcc0f20ca5f1e041cedae2b3ef GIT binary patch literal 38292 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 = [%i]\n", hptr->magic); +} diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c new file mode 100644 index 00000000..21a2b294 --- /dev/null +++ b/malloc/src/malloc.c @@ -0,0 +1,51 @@ +#include "malloc.h" + +t_node *tiny_zone = NULL; +t_node *small_zone = NULL; +t_node *tiny_alloc = NULL; +t_node *small_alloc = NULL; + +t_node **find_node(t_node **node, size_t size) +{ + while (*node && (size_t)(*node)->size < sizeof(t_header) + size) + node = &(*node)->next; + return (node); +} + +void add_chunk(t_node **node_ref, size_t size) +{ + while (*node_ref) + node_ref = &(*node_ref)->next; + *node_ref = mmap(NULL, malloc_N, PROT_READ|PROT_WRITE, + MAP_ANON|MAP_PRIVATE, -1, 0); + (*node_ref)->size = (TINY(size) ? malloc_N : malloc_M) + sizeof(t_node); + (*node_ref)->next = NULL; +} + +void *split_node(t_node **node, size_t size) +{ + t_header *hptr; + int free_size; + + free_size = (*node)->size; + hptr = *(t_header**)node; + *node = *node + size + sizeof(*hptr); + (*node)->size = free_size - size - sizeof(*hptr); + hptr->size = size; + hptr->magic = malloc_magic; + return (hptr + sizeof(*hptr)); +} + +void *malloc(size_t size) +{ + t_node **zone_ref; + t_node **node_ref; + void *ptr; + + printf("malloc(%zu) was called\n", size); + zone_ref = TINY(size) ? &tiny_zone : &small_zone; + while (!(*(node_ref = find_node(zone_ref, size)))) + add_chunk(node_ref, size); + ptr = split_node(node_ref, size); + return (ptr); +} diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c new file mode 100644 index 00000000..94cbd062 --- /dev/null +++ b/malloc/src/show_alloc_mem.c @@ -0,0 +1,30 @@ +#include "malloc.h" + +t_node *tiny_zone; +t_node *small_zone; + +int show_free_zone(t_node *node) +{ + int total; + + total = 0; + while (node) + { + printf("%p - %p: %i bytes\n", node, node + node->size, node->size); + total += node->size; + node = node->next; + } + return (total); +} + +void show_alloc_mem(void) +{ + int total; + + total = 0; + ft_putstr("TINY:\n"); + total += show_free_zone(tiny_zone); + ft_putstr("SMALL:\n"); + total += show_free_zone(small_zone); + printf("Total: %i bytes\n", total); +} diff --git a/malloc/update_makefile.sh b/malloc/update_makefile.sh new file mode 100755 index 00000000..a1b3228d --- /dev/null +++ b/malloc/update_makefile.sh @@ -0,0 +1,17 @@ +MYPATH=$(pwd) +CUR_MAKEFILE=$MYPATH/Makefile +if [ -e $CUR_MAKEFILE ] +then + echo "regenerate Makefile" + sed "`grep -n 'SRC_BASE =' $CUR_MAKEFILE | sed 's/:.*//'`, \$d" $CUR_MAKEFILE > NEWMAKEFILE + grep 'SRC_BASE =' $CUR_MAKEFILE >> NEWMAKEFILE + expr "$(find ./src | grep "\.c" | sed -e 's/src\///' -e 's/\.\///' -e 's/$/\\/')" : "\(.*\).$" >> NEWMAKEFILE + echo "" >> NEWMAKEFILE + grep 'SRCS =' $CUR_MAKEFILE >> NEWMAKEFILE + sed "1, `grep -n 'SRCS =' $CUR_MAKEFILE | sed 's/:.*//'`d" $CUR_MAKEFILE >> NEWMAKEFILE + mv $CUR_MAKEFILE ~/Documents/.OLDMakefile + mv NEWMAKEFILE $CUR_MAKEFILE + echo "Makefile done (copy still alive in ~/Documents/.OLDMakefile)" +else + echo "Makefile not found." +fi From 053c0773deb90045bf14dd8ea0166c76c9ac1571 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 16 Feb 2017 15:48:29 +0100 Subject: [PATCH 02/27] some work done on splitting, free() next --- malloc/includes/malloc.h | 34 ++++++++------- malloc/libft_malloc_x86_64_Darwin.so | Bin 38292 -> 38876 bytes malloc/main.c | 22 ++++++++-- malloc/myprogram | Bin 8496 -> 8648 bytes malloc/src/malloc.c | 51 ++++++++++++++++------- malloc/src/show_alloc_mem.c | 59 ++++++++++++++++++++++----- 6 files changed, 124 insertions(+), 42 deletions(-) diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index 8598e563..13526d2e 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -1,14 +1,17 @@ #ifndef MALLOC_H # define MALLOC_H -#define malloc_n 20 -#define malloc_m 100 -#define malloc_N 100 -#define malloc_M 500 -#define malloc_magic 1234567 -#define TINY(x) (x < (malloc_n + 1)) -#define SMALL(x) (!TINY(x) && !LARGE(x)) -#define LARGE(x) (malloc_m < x) +# define malloc_n 64 +# define malloc_m 512 +# define malloc_N (1 * getpagesize()) +# define malloc_M (2 * getpagesize()) +# define malloc_magic 1234567 +# define malloc_realign(x) ((((x) + 1) / 8) * 8) +# define malloc_bytes(x) (((x) + 1) / 8) +# define HEADER_SIZE malloc_bytes(sizeof(t_node)) +# define TINY(x) (x < (malloc_n + 1)) +# define SMALL(x) (!TINY(x) && !LARGE(x)) +# define LARGE(x) (malloc_m < x) #include "../libft/includes/libft.h" #include @@ -23,12 +26,15 @@ typedef struct s_node { struct s_node *next; } t_node; -extern t_node *tiny_head; -extern t_node *small_head; +extern t_node *tiny_zone; +extern t_node *small_zone; +extern t_node *tiny_alloc; +extern t_node *small_alloc; -void free(void *ptr); -void *malloc(size_t size); -void *realloc(void *ptr, size_t size); -void show_alloc_mem(void); +void free(void *ptr); +void *malloc(size_t size); +void *realloc(void *ptr, size_t size); +void show_alloc_mem(void); +void show_free_mem(void); #endif diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so index a97431330641e2dcc0f20ca5f1e041cedae2b3ef..541b837859924acfc97225780df32a7c691c9f87 100755 GIT binary patch delta 9990 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 L3*!E5tHk~fd&(G$ delta 8852 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 diff --git a/malloc/main.c b/malloc/main.c index d2b8fb26..3b962dbd 100644 --- a/malloc/main.c +++ b/malloc/main.c @@ -4,10 +4,24 @@ int main(void) { void *ptr; - ptr = malloc(10); - ptr = malloc(42); - ptr = malloc(3); - ptr = malloc(15); + 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)); + show_alloc_mem(); + ft_putchar('\n'); + + ptr = malloc(65 * sizeof(long)); + show_alloc_mem(); + ft_putchar('\n'); + + ptr = malloc(64 * sizeof(long)); + show_alloc_mem(); + ft_putchar('\n'); + return (0); } diff --git a/malloc/myprogram b/malloc/myprogram index f11d0a53edabbefae919523cf72500c39a43babd..e3d378bfd5ecb778d6240e57d22e51eecb1bf595 100755 GIT binary patch delta 1046 zcmZ8gUr1A76#u^c@o#xIH5fVdP8@C^c|{9DEHkbw=tWa9N|xCENYjmZg&4$$Ah?0B z@!3lc(W6n+L?2oYh7~r0ivEEQK17sV!G{$Q5y3iV_uJAAJLmk)@BHrB_kH)fslLqd zL@m{l`%csK4?=P=xl>d5*ur$N3C6)?c;10yFwj( z1}NAZZM80Op@(;u*c*D6n%QMT2X(OpLme$; zFAd!^!^(}_juB8@5@ETJafA$7zZ^A19S%x7$*C2Yl1XO^JelN_jF4~;I%3&V=} z$*s;Cj|Se^Z_aPev8>T$kgC{z(>3cnAK-=|7Vy;Kf~l>Xi9%^ydM^I~hG?4*JhMG* zaAxXiif9{peE{lZ{Bu>_26k0vTY*jEB=walYrx+JoX*Q$tMX@U7G;Z;`S_cVIDnJ0^=puhoys}WkQ2BdvbCAZ<$~3SHV}!3 z-Xc1LD1!(WxU~!@G8XVnPsDsZXPpzH6$D|}?+S&d0&bu}GygcnI~Bg*E3$;$6YP8O zs&>LGbQ}91bToPRof+i$9M689BLe#-G%iY(2ZG7kWEo~A(NXVLypb7YJUA952@kqRPvBqrzwglV=ZU!#}2kXVhcJRXUpg0tgiNuK)l5 delta 600 zcmX@%yuoRL2;+>2qT!4k6LYN@SthPj7gFG7U|?imV2A-?5K!Qs_{dJM1}e$}5oD;D zY{+OY*Z~z)fr@raZe&!P{E1Oca1B((11hs-vLe%JMyAPUnT#0)CNnZiGqOyUWwvHC zm>kJ$t*8N1<)Og9U;w0E8-RRPApHVJdraQSEYHY1S&&tl^#YL3HZf3mG6#!> zK%Q}ayU0}Q-|KA`KL0Vz;lN}E77Zo^{>fP^ZGsg*g&aTwG=W$Eh#NLDvg&hgR$z5t zoNU0yUN5kN3n=yd(?!Vtt~M(`Cue4w{r@`6AnSRo&f zVR*o!`G`R5;s2_AK;D1V2|&`PSGE#JIR^h%%>>dDGJpib%V+=p|IYww(Pwyh2gn2k zwG2oC2#{$|Fo2@M1W1E$?c}@s#uF1bIA=gZcF|@-f%E*66<8%$1eFAWCbK9gD&{8U zsize < sizeof(t_header) + size) + while (*node && (size_t)(*node)->size < sizeof(t_node) + size) node = &(*node)->next; return (node); } @@ -18,34 +18,57 @@ void add_chunk(t_node **node_ref, size_t size) node_ref = &(*node_ref)->next; *node_ref = mmap(NULL, malloc_N, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0); - (*node_ref)->size = (TINY(size) ? malloc_N : malloc_M) + sizeof(t_node); + (*node_ref)->size = TINY(size) ? malloc_N : malloc_M; (*node_ref)->next = NULL; } -void *split_node(t_node **node, size_t size) +void mem_insert(t_node **head, t_node *new) { - t_header *hptr; + 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; int free_size; - free_size = (*node)->size; - hptr = *(t_header**)node; - *node = *node + size + sizeof(*hptr); - (*node)->size = free_size - size - sizeof(*hptr); - hptr->size = size; - hptr->magic = malloc_magic; - return (hptr + sizeof(*hptr)); + 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("alloc @ [%p]\n", *alloc); */ + /* fflush(stdout); */ + new_alloc = *free; + *(void**)free += 8 * (size + HEADER_SIZE); + (*free)->size = free_size - (size + HEADER_SIZE); + new_alloc->size = size; + mem_insert(alloc, new_alloc); + return (*alloc + HEADER_SIZE); } void *malloc(size_t size) { t_node **zone_ref; + t_node **alloc_ref; t_node **node_ref; void *ptr; - printf("malloc(%zu) was called\n", size); + printf("malloc(%zu) was called. [%lu] bytes\n", size, malloc_bytes(size)); + size = malloc_bytes(size); zone_ref = TINY(size) ? &tiny_zone : &small_zone; - while (!(*(node_ref = find_node(zone_ref, size)))) + alloc_ref = TINY(size) ? &tiny_alloc : &small_alloc; + while (!*(node_ref = find_node(zone_ref, size))) add_chunk(node_ref, size); - ptr = split_node(node_ref, size); + ptr = split_node(node_ref, alloc_ref, size); return (ptr); } diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c index 94cbd062..c160db0f 100644 --- a/malloc/src/show_alloc_mem.c +++ b/malloc/src/show_alloc_mem.c @@ -2,16 +2,40 @@ t_node *tiny_zone; t_node *small_zone; +t_node *tiny_alloc; +t_node *small_alloc; -int show_free_zone(t_node *node) +void print_free_mem(t_node *node) +{ + size_t size; + void *addr; + + size = node->size; + addr = (void*)node; + printf("\t%p - %p : %4zu byte%c\n", + addr, addr + 8 * size, size, size > 1 ? 's' : 0); +} + +void print_alloc_mem(t_node *node) +{ + size_t size; + void *addr; + + size = node->size; + addr = (void*)node + HEADER_SIZE; + printf("\t%p - %p : %4zu(+%zu) byte%c\n", + addr, addr + 8 * size, size, HEADER_SIZE, size > 1 ? 's' : 0); +} + +int show_zone(t_node *node, int is_free) { int total; total = 0; while (node) { - printf("%p - %p: %i bytes\n", node, node + node->size, node->size); - total += node->size; + is_free ? print_free_mem(node) : print_alloc_mem(node); + total += node->size + HEADER_SIZE; node = node->next; } return (total); @@ -19,12 +43,27 @@ int show_free_zone(t_node *node) void show_alloc_mem(void) { - int total; + size_t free_total; + size_t alloc_total; - total = 0; - ft_putstr("TINY:\n"); - total += show_free_zone(tiny_zone); - ft_putstr("SMALL:\n"); - total += show_free_zone(small_zone); - printf("Total: %i bytes\n", total); + free_total = 0; + alloc_total = 0; + if (tiny_alloc) + 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) + ft_putstr("SMALL:"); + ft_putstr(FG_RED); + alloc_total += show_zone(small_alloc, 0); + ft_putstr(FG_GREEN); + free_total += show_zone(small_zone, 1); + ft_putstr(FG_DEFAULT); + printf("Total:"); + printf("\t%7zu bytes allocated\n", alloc_total); + printf("\t%7zu bytes free\n", free_total); + printf("\t%7zu bytes mapped\n", alloc_total + free_total); } From 1b8b22fbdf1e926364b93c52f6df9581b7bd810e Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 16 Feb 2017 18:10:01 +0100 Subject: [PATCH 03/27] 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); From 4482024705edbed78656f476a83b03679aa5b60f Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 16 Feb 2017 19:32:00 +0100 Subject: [PATCH 04/27] free fixes, gonna do large memory zones next --- malloc/.gitignore | 2 ++ malloc/includes/malloc.h | 2 +- malloc/libft_malloc_x86_64_Darwin.so | Bin 11536 -> 11536 bytes malloc/main.c | 10 +++++----- malloc/myprogram | Bin 8640 -> 0 bytes malloc/src/malloc.c | 10 +++++++--- 6 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 malloc/.gitignore delete mode 100755 malloc/myprogram diff --git a/malloc/.gitignore b/malloc/.gitignore new file mode 100644 index 00000000..0b2c88d2 --- /dev/null +++ b/malloc/.gitignore @@ -0,0 +1,2 @@ +myprogram +*.o diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index b9725805..71aa48e8 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -2,7 +2,7 @@ # define MALLOC_H # define malloc_n 64 -# define malloc_m 512 +# define malloc_m 1024 # define malloc_N (1 * getpagesize()) # define malloc_M (2 * getpagesize()) # define malloc_magic 1234567 diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so index 4ef82e3d186d33d4081c0591a29e2189523e1ec6..0242ce5390bca4fb078a8b8a0533225f013ad45a 100755 GIT binary patch delta 1656 zcmZWpeP~-%6u&n~+caOV$y{lj)uc_fP$gT%!cvV{B-x(YNaqL4xsi-*vew!>adEb6 zCJ@CwLnPaoU$bZt91Mp}BAZT;1jp<|Xg2&~L(x>GypEv(VGB}Q&wcN{I@yJH&i(!F z@7#0Fy}2oFEp9DNI?GK&9iNyrUq1Lw*eN+Q(4jdZ9h?t4Cpo#ElammnVP~1MS2$Y+ znTA&$7c?kxmSF?TnO4C%qp7q&A2+nUFneL&uA}{vr=lC@9oG(hSxTCc6zWaA^l)ia zbCI^6!-~X${j};mr!r#hKs_Sl+AyIKz@92K zBF8SzTN%Dx#T0Qqc3CWh#u1A;3)9-g!G(lMB_+|@qC>M8UWR2OuHtuZybmH>5QwHW_ay_p005zcP>vCJz$f6{i~4 z^e&6Lv6@dYQn72*9ASCds!gq5t8;=pnWt(r^M|Eng(t9e3`ZdsN##3(E0W7J|p zapdtPw`u3Fk*V_Ox*WTTWJ*j;OvPhrZF*=$cB?E@8U{SZgfakX6YCF!Wu+7uiQtiNLtrPZp?z5Gx8C&35C#v*449P3Vb{<-qu7RDk;0%($4wF7U6#U>%x z6LwWOJI>i^GrZOla7ryKln|NI5}fNv+_a@zeJX^UucP?kR`mW#W_vslo>jOTC>RmRs@km$l{7%1J@47vxEZ(}XfF*g3(@ zgH99mlQM^zU>SD7FYcQmR^=}JLmzSlJMvQ7GntK#zImmv^~0IVJ4TO8VcKW(vmaGq z-6>a)kmO_q*QfJD+gH}~L#C$x*i%fI`oPs5{aa1nHK(5~rmiA2Xa42JTEzjB)o8;axY&JOE2hd?u}-HfkTKG}N@A1vL&IlckoGjfLfsSe z672A{(Owwx-rg{TEovhj2W+?D5!*=*z?3&mPe9q*N*6)(b<%gC*O#a9(j}ivX*(?X zSLX>1r46qq@?k$KFtVZEh3%X!S1K6GEIy8L``?IuL!=cGri8O2EK`L0zSgQzmZqmH z^EuQ_A;-4%v@MOBzb@I*@0X>x52>=b)&6uRQS7|xgDmg*ZpJXvY~tO# z%womqCM~)t@Dfigm*CwjT>Gz^i0Eb)m)^fDEo)t@ohj7fKzAdLXWz^BVI5Ny2Q0mN z5y?%Qyo-}%z1u|c4o=<)+XCU{L3~w-4B7T2+ZNFFj5O^=m)u#2Y=$=io8XVY$MC+q zN@6!;9pY7c%VgGD_@SO3{#`S8dl{AdgbO(B40Tt+h+ zL^G|RnFtY5mCNjZw(sfeV~>+_^vUe=ePoFq*qh1pk&+9uZbF$+51s0&8mj?g3wqT? zkF^5B!b%uY@9|r{d(*jbIze-}SvaG1E#K)EaGo$e7Bn{Jl^9+aww44NgHz2}^|qf+ zJj_@mNfeDCRD1CxSgrx_mPCknn1+xS1xq||q$R413tAWSILx&4sc(OB<4W9kHKP z3K5CZ*91)@=)7fP-kF2Fm06!+Cz}LzcB55bXQ!hAJAd18ft|zc64=@E9RfQ8@8=I*BT*@rnWbIy0p znX_}hnG3UbuK)GRKMx3z*e%4;E+Iq`E!-o-8zKcuh)2-!Xi}b;JmI|JOrNH=R}#JO zu84JRAW_O0=lo1>N;IB792bo-H*ueC3`^;|ZJ(Bs{(9Mm@GuB%>NqhTXIu7&rES1^ zO}|xac3u7T4(?O+p3oTvn*js5-u>F4>d6JytGf;O`sF?sLGj`__t{YJSu zuM_&~UDEZQ)p6pu^wdT`%2xGaxjHAy)lx0Oz3cIjuE#Z}5ck(m5!G{DLo_L;CTAvN z5v*U&x|;Qktt<9ix3-j3Pc|1T#hNGUe&e3?Oc`!ejyFR7xlfEp=@tH~UJ~OuzfnDa zI9`wYj?KvSdvNOHOD{T8C(RyC^*tvr<>Tn#RSj)M{t>)qSz0L}2A~F@4?r79rGz*S z(1vCnxo3P0nE9^{qd`B2b_Ojj%w;osF&;B^7UKsEh-thgoKh6aw3>~KS1xAe7QH#0 z^C&du@!lu5-u+?l*vyB^)9V4;CZ!K*&aVCj~&vEyTyf4QhCKLy2k zzMoP&9@3b+TCogR1}p=X0n318z%pPNxHkjm^1;vf z-tKfd3p}E3-lTPq*0;2>v^HqHKOaS0G$3)!voz1zN1)mGf0aU;|8EAtW0G7d=^Dn7M?Rg?TEC`sN$a}S zCf{nyfMvikU>UFsSOzQumI2FvWxz6E8L$jk2LAsH>>o*<<1B}AyzGlE!(|co!??VD zxgl0XBe_2(OAXhheE_z)nj=a9H5Y0ZrMj%ExD|RwhjMb>_087}y0UQ9afj`ffQ%$0 z?rV3+%7S#;?rh6YL&k2gX1;A0gYJEaWK@OUDISin`sP8*d}x}H zjGzbLut+lKAFi=}Xrz4IBtBA!w4+QXKi M*YMR(@Qy|L7sb|Cp8x;= diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c index 58311c28..b89c8b73 100644 --- a/malloc/src/malloc.c +++ b/malloc/src/malloc.c @@ -7,18 +7,22 @@ t_node *small_alloc = NULL; t_node **find_node(t_node **node, size_t size) { - while (*node && (size_t)(*node)->size < sizeof(t_node) + size) + while (*node && (size_t)(*node)->size < size + HEADER_SIZE) node = &(*node)->next; return (node); } void add_chunk(t_node **node_ref, size_t size) { + size_t chunk_size; + while (*node_ref) node_ref = &(*node_ref)->next; - *node_ref = mmap(NULL, malloc_N, PROT_READ|PROT_WRITE, + chunk_size = TINY(size) ? malloc_N : malloc_M; + printf("chunk_size=[%zu]\n", chunk_size); + *node_ref = mmap(NULL, (chunk_size +1) * 8, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0); - (*node_ref)->size = TINY(size) ? malloc_N : malloc_M; + (*node_ref)->size = chunk_size; (*node_ref)->next = NULL; } From 982fc062f97aae63b5bb4c638ca12ec608f927b9 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Fri, 17 Feb 2017 13:19:28 +0100 Subject: [PATCH 05/27] fixes bit/byte confusion, also large zones work now --- malloc/includes/malloc.h | 16 ++++-- malloc/libft_malloc_x86_64_Darwin.so | Bin 11536 -> 12004 bytes malloc/main.c | 17 +----- malloc/src/free.c | 19 +++++-- malloc/src/insert_node.c | 12 +++++ malloc/src/malloc.c | 47 +++++++++++------ malloc/src/show_alloc_mem.c | 74 ++++++++++++++++----------- 7 files changed, 117 insertions(+), 68 deletions(-) diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index 71aa48e8..07a3c41f 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -1,3 +1,15 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* malloc.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/17 12:28:05 by jhalford #+# #+# */ +/* Updated: 2017/02/17 13:17:57 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + #ifndef MALLOC_H # define MALLOC_H @@ -6,9 +18,7 @@ # define malloc_N (1 * getpagesize()) # define malloc_M (2 * getpagesize()) # define malloc_magic 1234567 -# define malloc_realign(x) ((((x) + 1) / 8) * 8) -# define malloc_bytes(x) (((x) + 1) / 8) -# define HEADER_SIZE malloc_bytes(sizeof(t_node)) +# define HEADER_SIZE (sizeof(t_node)) # define TINY(x) (x < (malloc_n + 1)) # define SMALL(x) (!TINY(x) && !LARGE(x)) # define LARGE(x) (malloc_m < x) diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so index 0242ce5390bca4fb078a8b8a0533225f013ad45a..71181154b57db7bcc0d6b6e7a708dba29bc9b548 100755 GIT binary patch literal 12004 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 Rmu+c@%L$bT^uH06{{Y62a}fXl literal 11536 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 Zw9rxfJ5bn5q-YsYP!XMDQ +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ +/* Updated: 2017/02/17 13:18:39 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "malloc.h" int remove_node(t_node **head, t_node *node) @@ -18,7 +30,7 @@ int coalesce_nodes(t_node **head) { while (*head) { - if ((*head)->next == *(void**)head + 8 * (*head)->size) + if ((*head)->next == *(void**)head + (*head)->size) { (*head)->size += (*head)->next->size; (*head)->next = (*head)->next->next; @@ -35,12 +47,9 @@ void free(void *ptr) t_node **alloc_ref; t_node *hptr; - hptr = ptr - 8 * HEADER_SIZE; + hptr = ptr - 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); diff --git a/malloc/src/insert_node.c b/malloc/src/insert_node.c index ff9adf4a..7b16e788 100644 --- a/malloc/src/insert_node.c +++ b/malloc/src/insert_node.c @@ -1,3 +1,15 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* insert_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/17 12:28:15 by jhalford #+# #+# */ +/* Updated: 2017/02/17 12:28:15 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "malloc.h" void insert_node(t_node **head, t_node *new) diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c index b89c8b73..64baa2bf 100644 --- a/malloc/src/malloc.c +++ b/malloc/src/malloc.c @@ -1,9 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* malloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ +/* Updated: 2017/02/17 13:18:34 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "malloc.h" t_node *tiny_zone = NULL; t_node *small_zone = NULL; +t_node *large_zone = NULL; t_node *tiny_alloc = NULL; t_node *small_alloc = NULL; +t_node *large_alloc = NULL; t_node **find_node(t_node **node, size_t size) { @@ -18,9 +32,11 @@ void add_chunk(t_node **node_ref, size_t size) while (*node_ref) node_ref = &(*node_ref)->next; - chunk_size = TINY(size) ? malloc_N : malloc_M; - printf("chunk_size=[%zu]\n", chunk_size); - *node_ref = mmap(NULL, (chunk_size +1) * 8, PROT_READ|PROT_WRITE, + if (LARGE(size)) + chunk_size = size + HEADER_SIZE; + else + chunk_size = TINY(size) ? malloc_N : malloc_M; + *node_ref = mmap(NULL, chunk_size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0); (*node_ref)->size = chunk_size; (*node_ref)->next = NULL; @@ -32,18 +48,12 @@ void *split_node(t_node **free, t_node **alloc, size_t size) int free_size; free_size = (*free)->size; - /* printf("split now size=[%zu]\n", size); */ - /* printf("free @ [%p], size=[%i]\n", *free, (*free)->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); */ + *(void**)free += (size + HEADER_SIZE); (*free)->size = free_size - (size + HEADER_SIZE); new_alloc->size = size; insert_node(alloc, new_alloc); - return ((void*)new_alloc + HEADER_SIZE * 8); + return ((void*)new_alloc + HEADER_SIZE); } void *malloc(size_t size) @@ -53,10 +63,17 @@ void *malloc(size_t size) t_node **node_ref; void *ptr; - printf("malloc(%zu) was called. [%lu] bytes\n", size, malloc_bytes(size)); - size = malloc_bytes(size); - zone_ref = TINY(size) ? &tiny_zone : &small_zone; - alloc_ref = TINY(size) ? &tiny_alloc : &small_alloc; + printf("malloc(%zu) was called\n", size); + if (LARGE(size)) + { + zone_ref = &large_zone; + alloc_ref = &large_alloc; + } + else + { + zone_ref = TINY(size) ? &tiny_zone : &small_zone; + alloc_ref = TINY(size) ? &tiny_alloc : &small_alloc; + } while (!*(node_ref = find_node(zone_ref, size))) add_chunk(node_ref, size); ptr = split_node(node_ref, alloc_ref, size); diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c index d2dc2526..16d1fd06 100644 --- a/malloc/src/show_alloc_mem.c +++ b/malloc/src/show_alloc_mem.c @@ -1,9 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* show_alloc_mem.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/17 12:28:20 by jhalford #+# #+# */ +/* Updated: 2017/02/17 13:18:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "malloc.h" t_node *tiny_zone; t_node *small_zone; +t_node *large_zone; t_node *tiny_alloc; t_node *small_alloc; +t_node *large_alloc; void print_free_mem(t_node *node) { @@ -13,7 +27,7 @@ void print_free_mem(t_node *node) size = node->size; addr = (void*)node; printf("\t%p - %p : %4zu byte%c\n", - addr, (void*)addr + 8 * size, size, size > 1 ? 's' : 0); + addr, (void*)addr + size, size, size > 1 ? 's' : 0); } void print_alloc_mem(t_node *node) @@ -22,48 +36,48 @@ void print_alloc_mem(t_node *node) void *addr; size = node->size; - addr = (void*)node + 8 * HEADER_SIZE; + addr = (void*)node + HEADER_SIZE; printf("\t%p - %p : %4zu(+%zu) byte%c\n", - addr, (void*)addr + 8 * size, size, HEADER_SIZE, size > 1 ? 's' : 0); + addr, (void*)addr + size, size, HEADER_SIZE, size > 1 ? 's' : 0); } -int show_zone(t_node *node, int is_free) +int show_zone(t_node *node, int is_free, size_t (*total)[3]) { - int total; - - total = 0; while (node) { is_free ? print_free_mem(node) : print_alloc_mem(node); - total += node->size + (is_free ? 0 : HEADER_SIZE); + (*total)[is_free ? 0 : 1] += node->size; + (*total)[2] += is_free ? 0 : HEADER_SIZE; node = node->next; } - return (total); + return (0); +} + +void show_alloc_zone(char *name, t_node *alloc, t_node *zone, size_t (*total)[3]) +{ + if (!alloc && !zone) + return ; + ft_putstr(name); + ft_putstr(FG_RED); + show_zone(alloc, 0, total); + ft_putstr(FG_GREEN); + show_zone(zone, 1, total); + ft_putstr(FG_DEFAULT); } void show_alloc_mem(void) { - size_t free_total; - size_t alloc_total; + size_t total[3]; - free_total = 0; - alloc_total = 0; - 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 || small_zone) - ft_putstr("SMALL:"); - ft_putstr(FG_RED); - alloc_total += show_zone(small_alloc, 0); - ft_putstr(FG_GREEN); - free_total += show_zone(small_zone, 1); - ft_putstr(FG_DEFAULT); + total[0] = 0; + total[1] = 0; + total[2] = 0; + show_alloc_zone("TINY:", tiny_alloc, tiny_zone, &total); + show_alloc_zone("SMALL:", small_alloc, small_zone, &total); + show_alloc_zone("LARGE:", large_alloc, large_zone, &total); printf("Total:"); - printf("\t%7zu bytes allocated\n", alloc_total); - printf("\t%7zu bytes free\n", free_total); - printf("\t%7zu bytes mapped\n", alloc_total + free_total); + printf("\t%7zu bytes free\n", total[0]); + printf("\t%7zu bytes allocated\n", total[1]); + printf("\t%7zu header bytes\n", total[2]); + printf("\t%7zu bytes mmap'd\n", total[0] + total[1] + total[2]); } From 28f582ad7f43d546186d9104a375b77a478102fe Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Fri, 17 Feb 2017 23:38:50 +0100 Subject: [PATCH 06/27] doing some work on hidding symbols... --- malloc/Makefile | 13 ++++--- malloc/includes/malloc.h | 34 ++-------------- malloc/includes/malloc_internal.h | 56 +++++++++++++++++++++++++++ malloc/libft | 2 +- malloc/libft_malloc_x86_64_Darwin.so | Bin 12004 -> 8876 bytes malloc/main.c | 6 +-- malloc/run.sh | 5 +++ malloc/src/free.c | 4 +- malloc/src/insert_node.c | 4 +- malloc/src/malloc.c | 6 +-- malloc/src/show_alloc_mem.c | 41 ++++++++++---------- 11 files changed, 102 insertions(+), 69 deletions(-) create mode 100644 malloc/includes/malloc_internal.h create mode 100755 malloc/run.sh diff --git a/malloc/Makefile b/malloc/Makefile index 0304ea74..90b545b5 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -6,8 +6,10 @@ NAME = libft_malloc.so ARCH_NAME = libft_malloc_$(HOSTTYPE).so CC = gcc -FLAGS = -Wall -Wextra -Werror -D_FLAGS = -g +W_FLAGS = -Wall -Wextra -Werror +V_FLAGS = -fvisibility=hidden +D_FLAGS = +FLAGS = $(W_FLAGS) $(V_FLAGS) $(D_FLAGS) DELTA = $$(echo "$$(tput cols)-47"|bc) @@ -34,13 +36,14 @@ all : @make -j $(NAME) $(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) - @$(CC) --shared $(FLAGS) $(D_FLAGS) \ + @$(CC) --shared $(FLAGS)\ -I $(INC_DIR) \ -I $(LIBFT_INC) \ $(LIBS) \ $(LIBFT_LIB) $(OBJS) \ -o $(ARCH_NAME) @ln -fs $(ARCH_NAME) $(NAME) + @strip -x $(NAME) @printf "\r\e[48;5;15;38;5;25m✅ MAKE $(ARCH_NAME)\e[0m\e[K\n" $(LIBFT_LIB): @@ -56,7 +59,7 @@ $(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) @$(eval COLOR=$(shell echo $$(($(PERCENT)%35+196)))) @$(eval TO_DO=$(shell echo $$((20-$(INDEX)*20/$(NB))))) @printf "\r\e[38;5;11m⌛ MAKE %10.10s : %2d%% \e[48;5;%dm%*s\e[0m%*s\e[48;5;255m \e[0m \e[38;5;11m %*s\e[0m\e[K" $(NAME) $(PERCENT) $(COLOR) $(DONE) "" $(TO_DO) "" $(DELTA) "$@" - @$(CC) $(FLAGS) $(D_FLAGS) -MMD -c $< -o $@\ + @$(CC) $(FLAGS) -MMD -c $< -o $@\ -I $(INC_DIR)\ -I $(LIBFT_INC) @$(eval INDEX=$(shell echo $$(($(INDEX)+1)))) @@ -80,7 +83,7 @@ re: fclean all relib: fcleanlib $(LIBFT_LIB) test: - gcc -lft_malloc -L. -Iincludes -o myprogram main.c + gcc -lft_malloc -L. -Iincludes -I$(LIBFT_INC) -o myprogram main.c .PHONY : fclean clean re relib cleanlib fcleanlib diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index 07a3c41f..482cabbc 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -5,47 +5,19 @@ /* +:+ +:+ +:+ */ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2017/02/17 12:28:05 by jhalford #+# #+# */ -/* Updated: 2017/02/17 13:17:57 by jhalford ### ########.fr */ +/* Created: 2017/02/17 23:00:06 by jhalford #+# #+# */ +/* Updated: 2017/02/17 23:00:10 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef MALLOC_H # define MALLOC_H -# define malloc_n 64 -# define malloc_m 1024 -# define malloc_N (1 * getpagesize()) -# define malloc_M (2 * getpagesize()) -# define malloc_magic 1234567 -# define HEADER_SIZE (sizeof(t_node)) -# define TINY(x) (x < (malloc_n + 1)) -# define SMALL(x) (!TINY(x) && !LARGE(x)) -# define LARGE(x) (malloc_m < x) - -#include "../libft/includes/libft.h" -#include - -typedef struct s_header { - int size; - int magic; -} t_header; - -typedef struct s_node { - int size; - struct s_node *next; -} t_node; - -extern t_node *tiny_zone; -extern t_node *small_zone; -extern t_node *tiny_alloc; -extern t_node *small_alloc; +#include "stdlib.h" void free(void *ptr); 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/includes/malloc_internal.h b/malloc/includes/malloc_internal.h new file mode 100644 index 00000000..6120b12d --- /dev/null +++ b/malloc/includes/malloc_internal.h @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* malloc_internal.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/17 23:00:24 by jhalford #+# #+# */ +/* Updated: 2017/02/17 23:25:09 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef MALLOC_INTERNAL_H +# define MALLOC_INTERNAL_H + +# define malloc_n 64 +# define malloc_m 1024 +# define malloc_N (1 * getpagesize()) +# define malloc_M (2 * getpagesize()) +# define malloc_magic 1234567 +# define HEADER_SIZE (sizeof(t_node)) +# define TINY(x) (x < (malloc_n + 1)) +# define SMALL(x) (!TINY(x) && !LARGE(x)) +# define LARGE(x) (malloc_m < x) + +#include "libft.h" +#include + +typedef struct s_header { + int size; + int magic; +} t_header; + +typedef struct s_node { + int size; + struct s_node *next; +} t_node; + +extern t_node *tiny_zone; +extern t_node *small_zone; +extern t_node *tiny_alloc; +extern t_node *small_alloc; + +# pragma GCC visibility push(default) + +void free(void *ptr); +void *malloc(size_t size); +void *realloc(void *ptr, size_t size); +void show_alloc_mem(void); + +# pragma GCC visibility pop + +void show_free_mem(void); +void insert_node(t_node **head, t_node *new); + +#endif diff --git a/malloc/libft b/malloc/libft index b9c0c4cb..a82ea94e 160000 --- a/malloc/libft +++ b/malloc/libft @@ -1 +1 @@ -Subproject commit b9c0c4cbb1adf15f11e681951500f23ad1f34c60 +Subproject commit a82ea94ef7f50f8396d7bf6f9c08ab4a7faa994d diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so index 71181154b57db7bcc0d6b6e7a708dba29bc9b548..9c5adf87fd22e76f1178fb09892b0f6ded5d31de 100755 GIT binary patch delta 1326 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 Rmu+c@%L$bT^uH06{{Y62a}fXl diff --git a/malloc/main.c b/malloc/main.c index a4601ef8..9933afc1 100644 --- a/malloc/main.c +++ b/malloc/main.c @@ -1,10 +1,8 @@ -#include "malloc.h" +#include "includes/malloc.h" +#include int main(void) { - printf("pagesize=[%i]\n", getpagesize()); - printf("sizeof(long)=[%lu]\n", sizeof(long)); - void *ptr0 = malloc(8150); show_alloc_mem(); printf("\n"); diff --git a/malloc/run.sh b/malloc/run.sh new file mode 100755 index 00000000..19faa239 --- /dev/null +++ b/malloc/run.sh @@ -0,0 +1,5 @@ +#!/bin/sh +export DYLD_LIBRARY_PATH=. +export DYLD_INSERT_LIBRARIES="libft_malloc.so" +export DYLD_FORCE_FLAT_NAMESPACE=1 +$@ diff --git a/malloc/src/free.c b/malloc/src/free.c index 01483f5c..77f01321 100644 --- a/malloc/src/free.c +++ b/malloc/src/free.c @@ -6,11 +6,11 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ -/* Updated: 2017/02/17 13:18:39 by jhalford ### ########.fr */ +/* Updated: 2017/02/17 23:02:10 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ -#include "malloc.h" +#include "malloc_internal.h" int remove_node(t_node **head, t_node *node) { diff --git a/malloc/src/insert_node.c b/malloc/src/insert_node.c index 7b16e788..ddbb1104 100644 --- a/malloc/src/insert_node.c +++ b/malloc/src/insert_node.c @@ -6,11 +6,11 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:15 by jhalford #+# #+# */ -/* Updated: 2017/02/17 12:28:15 by jhalford ### ########.fr */ +/* Updated: 2017/02/17 23:02:17 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ -#include "malloc.h" +#include "malloc_internal.h" void insert_node(t_node **head, t_node *new) { diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c index 64baa2bf..bdde52c4 100644 --- a/malloc/src/malloc.c +++ b/malloc/src/malloc.c @@ -6,11 +6,11 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/02/17 13:18:34 by jhalford ### ########.fr */ +/* Updated: 2017/02/17 23:02:14 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ -#include "malloc.h" +#include "malloc_internal.h" t_node *tiny_zone = NULL; t_node *small_zone = NULL; @@ -63,7 +63,7 @@ void *malloc(size_t size) t_node **node_ref; void *ptr; - printf("malloc(%zu) was called\n", size); + printf("malloc(%zu) called\n", size); if (LARGE(size)) { zone_ref = &large_zone; diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c index 16d1fd06..2a21ce08 100644 --- a/malloc/src/show_alloc_mem.c +++ b/malloc/src/show_alloc_mem.c @@ -6,11 +6,11 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:20 by jhalford #+# #+# */ -/* Updated: 2017/02/17 13:18:10 by jhalford ### ########.fr */ +/* Updated: 2017/02/17 23:13:52 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ -#include "malloc.h" +#include "malloc_internal.h" t_node *tiny_zone; t_node *small_zone; @@ -41,28 +41,27 @@ void print_alloc_mem(t_node *node) addr, (void*)addr + size, size, HEADER_SIZE, size > 1 ? 's' : 0); } -int show_zone(t_node *node, int is_free, size_t (*total)[3]) -{ - while (node) - { - is_free ? print_free_mem(node) : print_alloc_mem(node); - (*total)[is_free ? 0 : 1] += node->size; - (*total)[2] += is_free ? 0 : HEADER_SIZE; - node = node->next; - } - return (0); -} - void show_alloc_zone(char *name, t_node *alloc, t_node *zone, size_t (*total)[3]) { - if (!alloc && !zone) - return ; - ft_putstr(name); + if (alloc || zone) + printf("%s", name); + /* printf("%s", FG_RED); */ ft_putstr(FG_RED); - show_zone(alloc, 0, total); - ft_putstr(FG_GREEN); - show_zone(zone, 1, total); - ft_putstr(FG_DEFAULT); + while (alloc) + { + print_alloc_mem(alloc); + (*total)[1] += alloc->size; + (*total)[2] += HEADER_SIZE; + alloc = alloc->next; + } + printf("%s", FG_GREEN); + while (zone) + { + print_free_mem(zone); + (*total)[0] += zone->size; + zone = zone->next; + } + printf("%s", FG_DEFAULT); } void show_alloc_mem(void) From c395e96cd57a298e28d655723d5bfa944a2961d6 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sat, 18 Feb 2017 20:11:41 +0100 Subject: [PATCH 07/27] colorful debug framework --- malloc/Makefile | 9 ++- malloc/includes/malloc.h | 2 +- malloc/includes/malloc_internal.h | 19 +++-- malloc/libft | 2 +- malloc/libft_malloc_x86_64_Darwin.so | Bin 8876 -> 13836 bytes malloc/main.c | 21 +++--- malloc/run.sh | 2 +- malloc/src/error_lib.c | 41 +++++++++++ malloc/src/free.c | 44 ++++++------ malloc/src/get_zones.c | 36 ++++++++++ malloc/src/malloc.c | 88 +++++++++--------------- malloc/src/node_lib.c | 83 ++++++++++++++++++++++ malloc/src/{insert_node.c => realloc.c} | 22 ++---- malloc/src/show_alloc_mem.c | 45 ++++-------- malloc/test0.c | 12 ++++ 15 files changed, 282 insertions(+), 144 deletions(-) create mode 100644 malloc/src/error_lib.c create mode 100644 malloc/src/get_zones.c create mode 100644 malloc/src/node_lib.c rename malloc/src/{insert_node.c => realloc.c} (66%) create mode 100644 malloc/test0.c diff --git a/malloc/Makefile b/malloc/Makefile index 90b545b5..8cf4f4e8 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -7,7 +7,7 @@ ARCH_NAME = libft_malloc_$(HOSTTYPE).so CC = gcc W_FLAGS = -Wall -Wextra -Werror -V_FLAGS = -fvisibility=hidden +V_FLAGS = D_FLAGS = FLAGS = $(W_FLAGS) $(V_FLAGS) $(D_FLAGS) @@ -22,9 +22,12 @@ INC_DIR = includes/ OBJ_DIR = objs/ SRC_BASE = \ +error_lib.c\ free.c\ -insert_node.c\ +get_zones.c\ malloc.c\ +node_lib.c\ +realloc.c\ show_alloc_mem.c SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) @@ -85,6 +88,6 @@ relib: fcleanlib $(LIBFT_LIB) test: gcc -lft_malloc -L. -Iincludes -I$(LIBFT_INC) -o myprogram main.c -.PHONY : fclean clean re relib cleanlib fcleanlib +.PHONY : fclean clean re relib cleanlib fcleanlib $(LIBFT_LIB) -include $(OBJS:.o=.d) diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index 482cabbc..36128d63 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:06 by jhalford #+# #+# */ -/* Updated: 2017/02/17 23:00:10 by jhalford ### ########.fr */ +/* Updated: 2017/02/18 18:53:22 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/includes/malloc_internal.h b/malloc/includes/malloc_internal.h index 6120b12d..f81845d1 100644 --- a/malloc/includes/malloc_internal.h +++ b/malloc/includes/malloc_internal.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:24 by jhalford #+# #+# */ -/* Updated: 2017/02/17 23:25:09 by jhalford ### ########.fr */ +/* Updated: 2017/02/18 20:06:55 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,13 +18,14 @@ # define malloc_N (1 * getpagesize()) # define malloc_M (2 * getpagesize()) # define malloc_magic 1234567 -# define HEADER_SIZE (sizeof(t_node)) +# define HEADER_SIZE (sizeof(t_node) - alignof(t_node)) # define TINY(x) (x < (malloc_n + 1)) # define SMALL(x) (!TINY(x) && !LARGE(x)) # define LARGE(x) (malloc_m < x) #include "libft.h" #include +#include typedef struct s_header { int size; @@ -34,6 +35,7 @@ typedef struct s_header { typedef struct s_node { int size; struct s_node *next; + char data[1]; } t_node; extern t_node *tiny_zone; @@ -50,7 +52,16 @@ void show_alloc_mem(void); # pragma GCC visibility pop -void show_free_mem(void); -void insert_node(t_node **head, t_node *new); +void get_zones(t_node ***zone_ref, t_node ***alloc_ref, size_t size); +void insert_node(t_node **head, t_node *node); +int remove_node(t_node **head, t_node *node); +t_node *split_node(t_node **node, t_node **alloc, t_node **zone, size_t size); +t_node **find_node_firstfit(t_node **node, size_t size); + +void show_free_mem(void); +void print_node(char fg[7], t_node *node); + +void error_mmap(void); +void error_free_notalloc(void *ptr); #endif diff --git a/malloc/libft b/malloc/libft index a82ea94e..0ca8ca81 160000 --- a/malloc/libft +++ b/malloc/libft @@ -1 +1 @@ -Subproject commit a82ea94ef7f50f8396d7bf6f9c08ab4a7faa994d +Subproject commit 0ca8ca817f32fc0345ef93ef74a3abe2583bd89c diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so index 9c5adf87fd22e76f1178fb09892b0f6ded5d31de..0f30e1deef8e947ee01a727572bbc7346171f01f 100755 GIT binary patch literal 13836 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 literal 8876 zcmeHMVQgGS5#F=w;y6jqiJB^;lw4a}9I7OCiBsd$iVtrAMAdY3Mlv*v1Yi3dMtby22B9@eR>3XNNyiPe<2;x<`FToo7BB^w8 zaQLVmQ*PfCE$=D#Ua_p9@Tb|gRm*GC6NnefqbyGshgeo*Bpx3b*2CA>7u52aya9m4 z@``hiLl_6f%(A)<9Q>Bib->$W0T5A6dqE6HbOonf#j?0>TT!=`(T4{6`qNfCJTx>C zvBp~WT6_0cUEw5BX;+GQ^nehP($;`lXDuM*cqJGR;wd06Xh?IYqxODvR&0QPUjSc^ z`UENq?P6tI8QL- zzT)A4EE`a1Kj+d`U)>d?s!!}5O(l238LU0ysdOy9t8-U$92f?nJcLTQg@Bs7L*rcM zXSwv6&U>c47%-iQB{MUM3h0a$+y`OxpBV*E3#N14eGX}CI)-c77Xybc%;+NLI}?R@ zW0A`=?TLc$PcfU!d1HyB{7yFPnGs{r%!CS)kNJfE6c4bBv1rfw9Ahz`TV7t4e8+$d z#*(MOlMkC*&^~5XNmh#WQw&q#dr0lU5o6Ky@`wT#K<3A{hYnO!}NE*YdXDfQg6;~BRVJJmzi)8)13RuPnMVMC3tfaO~|(Y7kllD za9;*+jO!4BnHa_$!j2jFIuz79OU|9-xo=~-V=N#Yn!I2kCszE29FohD@#<2G1SPa& z?(_NW?M17WvFf0Y6yNdXi`kx2UT21^j?p@c^)=5<&q>$XZDKlf(|=0GU4|}#MIb5c zxq3$Hx%1P#H-Bi{eAVZl;xUuIyT~9<<7uT4x!AwUzx@sv@;p1aX*&Eij}LbnteMLp05|eH65Tq9V~gC#7&pwwCDRGH z&9lzjIerw*R$)%ZStx;Lus@uuU@tgx-I>sW`!3Xi3M&yW!-WMZA6K(+K8WO@dPcA~ z|BKh>^dehix@M|mTIkg6MVf(SpRbons_!wKd(22L@&<<3f2}un{KvVbXF63JE72VL zI4g@7yV=$B=!zq2*pzGj(A9(JAg#49x#UMn_VlC*7Z8<6!y%;!(bP^!`!%{Y9*<`SLk={>Wt` z<0AXv0c;Z{pWMa}30OT*=$2VEQSkX6zXD#)bmr+>Cv?5rnd{0J*Ws_r_@b?B*?#}_ zuA+R-)^yUFOu`Q5(x>Rf8L(D2ch;?SU+&6;s5?}mdu@EZ{lt88Lh!BpkZ=#6>*AE! zBBR%S4sz&Ri2MkLH&Zg({wj!W^M~-OoOY^RMWNu{r<`A)<1&a?^%zcnRQ5At^*qpk zBZYbP;9%yLf%^$EpQNH}OAi2aJu7t~UecC_m3-F?F_w&gC%@HnS|JT#k<#4!6(y}& zNn5X^1*NoiRx`fbA3+#!1B1*gT#>1Hg|qSf;m2{_$U!?ludap#2{SF17Q%P~7Lq{l4PTsH4hQiWMI2T{7fA); zF-1%$VgcI`#9l=lkwh$}I)rrPhJ4F0u7Te|erDrE$zO+465IGq{}et#2>iw1;R`M} zVrIGFH-O6xr)B%PY|qH{4YWdZXYU(Fr=w@NVGwX;fW-X2;QRspl*?adk73Kd%^pA2 z`Ah5>?EMM7baEVjw*u*rKz}k83-pDffp9dMjHOaS{rqigI61l_5W!F3ShP;8Ye)ok z2GFzx8upwV4fKttV-1lt^u~wfERWle68C=htIct?kFafui$ezvey2_JggUyr+eCNA zw;wm!#G#RNc&H6Z9@U~#(khByrN|%U;k2@bfCr3b#yeG zjEX0Z*Utp;NEVfk?N%S&pYb?8>EgCU7T=6GzO`&-e|T_6fF1z-Xe^xwAC093PsT`U z1c?_J>^GsG!25W*pI9rf6Uo6ehw0+8@P1g`FCI{rH{xJwVC00Q-ZA5`xabj8X-n+H zRgX9zsuH7VJhzMeXoh0LqN`fWuE)K{%clxn#7A(zKx;;xuje1$+UQRhBj?! zm$Iw9s-KaCRThep%#ragp{QIcNd}b$UIOUQuSv9IIGSwRy}M;^^PZMHj|lO9)58S* diff --git a/malloc/main.c b/malloc/main.c index 9933afc1..def26fb9 100644 --- a/malloc/main.c +++ b/malloc/main.c @@ -1,23 +1,20 @@ +#include #include "includes/malloc.h" -#include int main(void) { - void *ptr0 = malloc(8150); + void *ptr0 = malloc(4096); show_alloc_mem(); - printf("\n"); - void *ptr1 = malloc(300); + void *ptr1 = malloc(16); show_alloc_mem(); - printf("\n"); - /* free(ptr0); */ - /* show_alloc_mem(); */ - /* printf("\n"); */ - - free(ptr1); + free(ptr0); show_alloc_mem(); - printf("\n"); - return (0); + void *ptr2 = malloc(16); + show_alloc_mem(); + + void *ptr3 = malloc(32); + show_alloc_mem(); } diff --git a/malloc/run.sh b/malloc/run.sh index 19faa239..45580df0 100755 --- a/malloc/run.sh +++ b/malloc/run.sh @@ -1,5 +1,5 @@ #!/bin/sh -export DYLD_LIBRARY_PATH=. +export DYLD_LIBRARY_PATH="." export DYLD_INSERT_LIBRARIES="libft_malloc.so" export DYLD_FORCE_FLAT_NAMESPACE=1 $@ diff --git a/malloc/src/error_lib.c b/malloc/src/error_lib.c new file mode 100644 index 00000000..055c3abe --- /dev/null +++ b/malloc/src/error_lib.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* error_lib.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/18 19:34:23 by jhalford #+# #+# */ +/* Updated: 2017/02/18 20:08:32 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +void error_free_notalloc(void *ptr) +{ + int fd; + + fd = 1; + ft_putstr_fd(FG_RED"(", fd); + ft_putnbr_fd(getpid(), fd); + ft_putstr_fd(", ??? ", fd); + ft_putstr_fd(")", fd); + ft_putstr_fd(" malloc: error for object ", fd); + ft_putaddr_fd(ptr, fd); + ft_putendl_fd(": pointer being freed was not allocated"FG_DEFAULT, fd); + /* exit(134); */ +} + +void error_mmap(void) +{ + int fd; + + fd = 1; + ft_putstr_fd(FG_RED"(", fd); + ft_putnbr_fd(getpid(), fd); + ft_putstr_fd(", ??? ", fd); + ft_putstr_fd(")", fd); + ft_putendl_fd(" malloc: mmap failed", fd); + /* exit(134); */ +} diff --git a/malloc/src/free.c b/malloc/src/free.c index 77f01321..c5f53356 100644 --- a/malloc/src/free.c +++ b/malloc/src/free.c @@ -6,25 +6,18 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ -/* Updated: 2017/02/17 23:02:10 by jhalford ### ########.fr */ +/* Updated: 2017/02/18 20:10:24 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" -int remove_node(t_node **head, t_node *node) -{ - while (*head) - { - if (*head == node) - { - *head = (*head)->next; - return (0); - } - head = &(*head)->next; - } - return (1); -} +t_node *tiny_zone; +t_node *small_zone; +t_node *large_zone; +t_node *tiny_alloc; +t_node *small_alloc; +t_node *large_alloc; int coalesce_nodes(t_node **head) { @@ -45,14 +38,21 @@ void free(void *ptr) { t_node **zone_ref; t_node **alloc_ref; - t_node *hptr; + t_node *node; - hptr = ptr - HEADER_SIZE; - zone_ref = TINY(hptr->size) ? &tiny_zone : &small_zone; - alloc_ref = TINY(hptr->size) ? &tiny_alloc : &small_alloc; - if (remove_node(alloc_ref, hptr)) - printf("trying to free bad address"); - insert_node(zone_ref, hptr); - hptr->size += HEADER_SIZE; + ft_putstr(FG_YELLOW"free("); + ft_putaddr(ptr); + ft_putendl(")"FG_DEFAULT); + if (!ptr) + return ; + node = ptr - HEADER_SIZE; + get_zones(&zone_ref, &alloc_ref, node->size); + if (remove_node(alloc_ref, node)) + { + error_free_notalloc(ptr); + return ; + } + insert_node(zone_ref, node); coalesce_nodes(zone_ref); + ft_putendl(BG_GREEN"SUCCESSFUL FREE"BG_DEFAULT); } diff --git a/malloc/src/get_zones.c b/malloc/src/get_zones.c new file mode 100644 index 00000000..52c1f65c --- /dev/null +++ b/malloc/src/get_zones.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_zones.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/18 17:53:41 by jhalford #+# #+# */ +/* Updated: 2017/02/18 20:06:53 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +t_node *tiny_zone = NULL; +t_node *small_zone = NULL; +t_node *large_zone = NULL; +t_node *tiny_alloc = NULL; +t_node *small_alloc = NULL; +t_node *large_alloc = NULL; + +void get_zones(t_node ***zone_ref, t_node ***alloc_ref, size_t size) +{ + if (LARGE(size)) + { + *zone_ref = &large_zone; + *alloc_ref = &large_alloc; + } + else + { + *zone_ref = TINY(size) ? &tiny_zone : &small_zone; + *alloc_ref = TINY(size) ? &tiny_alloc : &small_alloc; + } + ft_putstr("zone @"); + **zone_ref ? print_node(BG_MAGENTA, **zone_ref) : ft_putendl(" NULL"); +} diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c index bdde52c4..93ad0b58 100644 --- a/malloc/src/malloc.c +++ b/malloc/src/malloc.c @@ -6,76 +6,56 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/02/17 23:02:14 by jhalford ### ########.fr */ +/* Updated: 2017/02/18 20:08:49 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" -t_node *tiny_zone = NULL; -t_node *small_zone = NULL; -t_node *large_zone = NULL; -t_node *tiny_alloc = NULL; -t_node *small_alloc = NULL; -t_node *large_alloc = NULL; +t_node *tiny_zone; +t_node *small_zone; +t_node *large_zone; +t_node *tiny_alloc; +t_node *small_alloc; +t_node *large_alloc; -t_node **find_node(t_node **node, size_t size) -{ - while (*node && (size_t)(*node)->size < size + HEADER_SIZE) - node = &(*node)->next; - return (node); -} - -void add_chunk(t_node **node_ref, size_t size) +void add_chunk(t_node **zone_ref, size_t size) { size_t chunk_size; + t_node *node; - while (*node_ref) - node_ref = &(*node_ref)->next; + /* while (*node_ref) */ + /* node_ref = &(*node_ref)->next; */ if (LARGE(size)) chunk_size = size + HEADER_SIZE; else chunk_size = TINY(size) ? malloc_N : malloc_M; - *node_ref = mmap(NULL, chunk_size, PROT_READ|PROT_WRITE, - MAP_ANON|MAP_PRIVATE, -1, 0); - (*node_ref)->size = chunk_size; - (*node_ref)->next = NULL; -} - -void *split_node(t_node **free, t_node **alloc, size_t size) -{ - t_node *new_alloc; - int free_size; - - free_size = (*free)->size; - new_alloc = *free; - *(void**)free += (size + HEADER_SIZE); - (*free)->size = free_size - (size + HEADER_SIZE); - new_alloc->size = size; - insert_node(alloc, new_alloc); - return ((void*)new_alloc + HEADER_SIZE); + if (!(node = mmap(NULL, chunk_size, PROT_READ|PROT_WRITE, + MAP_ANON|MAP_PRIVATE, -1, 0))) + error_mmap(); + ft_putstr("nchunk@"); + node->size = chunk_size; + insert_node(zone_ref, node); + print_node(BG_GREEN, node); } void *malloc(size_t size) { - t_node **zone_ref; - t_node **alloc_ref; - t_node **node_ref; - void *ptr; + t_node **zone_ref; + t_node **alloc_ref; + t_node **node_ref; + t_node *node; - printf("malloc(%zu) called\n", size); - if (LARGE(size)) - { - zone_ref = &large_zone; - alloc_ref = &large_alloc; - } - else - { - zone_ref = TINY(size) ? &tiny_zone : &small_zone; - alloc_ref = TINY(size) ? &tiny_alloc : &small_alloc; - } - while (!*(node_ref = find_node(zone_ref, size))) - add_chunk(node_ref, size); - ptr = split_node(node_ref, alloc_ref, size); - return (ptr); + ft_putstr(FG_YELLOW"malloc("); + ft_putnbr(size); + ft_putendl(")"FG_DEFAULT); + get_zones(&zone_ref, &alloc_ref, size); + while (!*(node_ref = find_node_firstfit(zone_ref, size))) + add_chunk(zone_ref, size); + ft_putstr("found @"); + print_node(FG_GREEN, *node_ref); + node = split_node(node_ref, alloc_ref, zone_ref, size); + ft_putstr("touser@"); + print_node(FG_RED, node); + return (node->data); } diff --git a/malloc/src/node_lib.c b/malloc/src/node_lib.c new file mode 100644 index 00000000..f1fe4216 --- /dev/null +++ b/malloc/src/node_lib.c @@ -0,0 +1,83 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* insert_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/17 12:28:15 by jhalford #+# #+# */ +/* Updated: 2017/02/18 20:08:46 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +t_node **find_node_firstfit(t_node **node, size_t size) +{ + /* if (*node) */ + /* { */ + /* ft_putstr("startf@"); */ + /* print_node(BG_CYAN, *node); */ + /* } */ + while (*node && (size_t)(*node)->size < size + HEADER_SIZE) + { + node = &(*node)->next; + /* ft_putstr("firstf@"); */ + /* print_node(FG_GREEN, *node); */ + } + return (node); +} + +t_node *split_node(t_node **node, t_node **alloc, t_node **zone, size_t size) +{ + t_node *new_alloc; + int free_size; + + free_size = (*node)->size; + new_alloc = *node; + /* ft_putstr("node->data @ ["); */ + /* ft_putaddr((*node)->data); */ + /* ft_putendl("]"); */ + *node = (t_node*)((*node)->data + size); + /* ft_putstr("node @ ["); */ + /* ft_putaddr(*node); */ + /* ft_putendl("]"); */ + (*node)->size = free_size - (size + HEADER_SIZE); + if ((*node)->size == 0) + remove_node(zone, *node); + new_alloc->size = size; + insert_node(alloc, new_alloc); + return (new_alloc); +} + + +int remove_node(t_node **head, t_node *node) +{ + while (*head) + { + ft_putstr("looking for node; diff=["); + ft_putaddr(node); + ft_putstr(","); + ft_putaddr(*head); + ft_putendl("]"); + if (*head == node) + { + *head = (*head)->next; + return (0); + } + head = &(*head)->next; + } + return (1); +} + +void insert_node(t_node **head, t_node *new) +{ + while (*head) + { + if (new < *head) + break ; + head = &(*head)->next; + } + new->next = *head; + *head = new; +} diff --git a/malloc/src/insert_node.c b/malloc/src/realloc.c similarity index 66% rename from malloc/src/insert_node.c rename to malloc/src/realloc.c index ddbb1104..ffd0a757 100644 --- a/malloc/src/insert_node.c +++ b/malloc/src/realloc.c @@ -1,28 +1,20 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* insert_node.c :+: :+: :+: */ +/* realloc.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2017/02/17 12:28:15 by jhalford #+# #+# */ -/* Updated: 2017/02/17 23:02:17 by jhalford ### ########.fr */ +/* Created: 2017/02/18 13:23:20 by jhalford #+# #+# */ +/* Updated: 2017/02/18 18:08:11 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" -void insert_node(t_node **head, t_node *new) +void *realloc(void *ptr, size_t size) { - while (*head) - { - if (new < *head) - { - new->next = *head; - *head = new; - return ; - } - head = &(*head)->next; - } - *head = new; + ft_putendl("realloc called"); + free(ptr); + return (malloc(size)); } diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c index 2a21ce08..ec7797e8 100644 --- a/malloc/src/show_alloc_mem.c +++ b/malloc/src/show_alloc_mem.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:20 by jhalford #+# #+# */ -/* Updated: 2017/02/17 23:13:52 by jhalford ### ########.fr */ +/* Updated: 2017/02/18 19:58:20 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,49 +19,34 @@ t_node *tiny_alloc; t_node *small_alloc; t_node *large_alloc; -void print_free_mem(t_node *node) +void print_node(char color[7], t_node *node) { - size_t size; - void *addr; - - size = node->size; - addr = (void*)node; - printf("\t%p - %p : %4zu byte%c\n", - addr, (void*)addr + size, size, size > 1 ? 's' : 0); -} - -void print_alloc_mem(t_node *node) -{ - size_t size; - void *addr; - - size = node->size; - addr = (void*)node + HEADER_SIZE; - printf("\t%p - %p : %4zu(+%zu) byte%c\n", - addr, (void*)addr + size, size, HEADER_SIZE, size > 1 ? 's' : 0); + ft_putstr("\t"); + ft_putstr(color); + ft_putaddr(node->data); + ft_putstr(" - "); + ft_putaddr(node->data + node->size); + ft_putstr(FBG_DEFAULT" : "); + ft_putnbr(node->size); + ft_putendl(" bytes"); } void show_alloc_zone(char *name, t_node *alloc, t_node *zone, size_t (*total)[3]) { if (alloc || zone) - printf("%s", name); - /* printf("%s", FG_RED); */ - ft_putstr(FG_RED); + ft_putstr(name); while (alloc) { - print_alloc_mem(alloc); + print_node(FG_RED, alloc); (*total)[1] += alloc->size; - (*total)[2] += HEADER_SIZE; alloc = alloc->next; } - printf("%s", FG_GREEN); while (zone) { - print_free_mem(zone); + print_node(FG_GREEN, zone); (*total)[0] += zone->size; zone = zone->next; } - printf("%s", FG_DEFAULT); } void show_alloc_mem(void) @@ -70,13 +55,11 @@ void show_alloc_mem(void) total[0] = 0; total[1] = 0; - total[2] = 0; show_alloc_zone("TINY:", tiny_alloc, tiny_zone, &total); show_alloc_zone("SMALL:", small_alloc, small_zone, &total); show_alloc_zone("LARGE:", large_alloc, large_zone, &total); printf("Total:"); printf("\t%7zu bytes free\n", total[0]); printf("\t%7zu bytes allocated\n", total[1]); - printf("\t%7zu header bytes\n", total[2]); - printf("\t%7zu bytes mmap'd\n", total[0] + total[1] + total[2]); + printf("\t%7zu bytes mmap'd\n", total[0] + total[1]); } diff --git a/malloc/test0.c b/malloc/test0.c new file mode 100644 index 00000000..b5830dce --- /dev/null +++ b/malloc/test0.c @@ -0,0 +1,12 @@ +#include "includes/malloc.h" + +int main(void) +{ + int i; + char *addr; + + i = 0; + while (i < 1024) + i++; + return (0); +} From 0f94380f7cb6e78eb694c96a9f94d508f85dffba Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 19 Feb 2017 21:22:03 +0100 Subject: [PATCH 08/27] putnbr_hex instead of putaddr --- malloc/libft | 2 +- malloc/libft_malloc_x86_64_Darwin.so | Bin 13836 -> 13828 bytes malloc/src/error_lib.c | 2 +- malloc/src/free.c | 4 +++- malloc/src/get_zones.c | 2 -- malloc/src/node_lib.c | 4 ++-- malloc/src/show_alloc_mem.c | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/malloc/libft b/malloc/libft index 0ca8ca81..5e978382 160000 --- a/malloc/libft +++ b/malloc/libft @@ -1 +1 @@ -Subproject commit 0ca8ca817f32fc0345ef93ef74a3abe2583bd89c +Subproject commit 5e978382fff27082681383029d99f76ae5a25ddc diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so index 0f30e1deef8e947ee01a727572bbc7346171f01f..181ae7e56dd39a29a77950e1935ac4eef86a35fa 100755 GIT binary patch delta 2041 zcmZ8heQZ-z6o0RDGG=E#wzV58ZDA}H7oZ&zHbYs*c=#k+{J<^&nM|gWg+UsVCPXPM z*^InA8lGH2K>k@sh%q4wRuU4jFF=NbD2n2YCe#?=mMx})0uL0F>l^6P_Bx_Af&Dd>@^{qs;YT;cgXuk@*JL+8!9gLw-)3@Z)(3OC>IK0Az%J5a zZWhC2kJ;-9UfXhiLFbCQBR`j~pkp_h7J{BJTS^4MLWa!?W(mS|@|!tW>Ic;#L*130 zU*s)Ghl>It30sR7o)JNzoRd@S1tnfkV!9gFW#wyH57`B$Wkt#MZ-rBnTtuE2}XoE9dAJmIF4I>8OQN*~0!-(5mq%&}C4!&H{F+*j?tJJW}I% zAfBMhEM$+(nFz>ATvuXwC6bdddbgC9o5rpCY8kr(Kzm+3B0qSj#`0=BrvR@qzDAX% z)&TXH>FH@XRkR2rsO?}IL2ih8Nme2g;HI`ufGcKV9bV~FV>uf6YkFFdzL)zi1Uk?6 z^dx$gSiJ)fOAsQm^1IwWWdp+7PXZy&3&KJ``VANiV}~(GHIk>RFm(R~Tj%-z`TGn< zxj(K8))e}TEQSXV(Vre;@SLHt1NvNWR2h@&Aa|vmW{X(>C|Z%ItV(nkrU{7vU_|{2 zvWKWXj7plVu9D^dqyYnUmUR3pCLOiaZ)4mzG?q_k2hg$p00T*uyU6nnM_CQn%*--} z^YWLFK1UV#!LcQQy(nc)aeZ9Mz);~cLu z`T}j`(K-yVfs2|UN)UmZwaz8?$`93J$8lab;?u|iSy4Bqn*bfP{fYVDB;PNB>a!n{ zp$cz8gCnGM3@zSdZaCCN!8%aMH5&4&0IC66298*TBKrrE0h8~9xwIApQ zoe@Ua$S9}I4l~bihNSCw9 zxt|M3_NwS*uV*)s{mvRw=lKJ!RrXDA>5OHNE(=>P&^Gd-tLX&~pnO$kN~d>lG^x=1 z*zW(B$=GI~y?lBIX?!;hF2pu6ys^=vpVch?`D*^>fIa$7&^b1VZ}1K>6e z)^d=-?G9iE2cIT8=AAVKb`rm5HyQPmS5?2(P``bBq_tIAzkY3`&A0XyNdl~CJGth$ zPEL5;rl>7_*}Khd(fq*Vv}Z_5&}$p4!}DT%EP+RkM1z+SIbS%?)uoBysL%IO z7!FZQ%!x@c1Hb4=@ub)l*2Jr#@DAJ_D5}ffL`L(`T%%$fqn>76mo_0f1 delta 2353 zcmZuzYitx%6rSk=N@=^h^hKY$QcxOdZ7T>(Q@aGl3<)Keh~XKCD8W#n3E700tSxQ{ z9fs9yt{73m4-g-LXi14L5L&vlO@9a~sZ}8?5%g}TxmW2fp&aHLI=N~J=6)7bIE-BUJKDM~REEo@;@ zovO2)NzURQuN2Kce0M>3_x`U7Ql5X~@0qaMDQIdc{@CfH8Hs9YKl?4IGM#djTIS6i zk0m=(S))CL@o5>U1Br^F`-1j$-K^bSoUk~9U9jiQw7XlQy1zbtMn#lyw^fT9o~Y@K z>c)56hPHJ>i?DlH`RuxVdghe`MG=m=>EXI@mIu?B-I1GcG@X??+_SgCYP;)+g57RJB(z5d{H`UbL2F+3~x-|sKxYJ6mGWdqOQ+8i5EY5KOR2=8Wcl|@`EHO z4gD#GHq5)?@p#w=i_aTVY<}doLUzCljfSCk$X3}oM~fNSP?(rD#nRM<3@wK6rc~SB ze5k(yg^F1ZH*WOpH|zQ6n9<8uq0ofony_3O9rK;7Fn;1`qF4xAy4H0E0)Z8}ab5Qf z5g>5)Fs3r(7MM&=lqZkFA|cxJkA;h*lZ49;=l|d$+j%(tKd#{kT*Ia|EO7x=(Ic=T zqWQ?^7?J_matm3R1U)3ILjsz+b--K^b=ywgHwO4Blzo7ZHD=~zZYMA_CD`8x?eEH| z>_BE7o0aJ*c>-$F8yO#qjHzO9CMW_+?32uGO>W&x{yvRT&|qQ6yn}}4qHbz~5c_(x zTS~7MbWjbSw@y9 zqAcM~K-B$O$gB?<{l2qtV+Gu9_AH(ks@b7$^aN>DK?_}tn5Yg`KEvLiwfR_FQ+I9Q?s+0d_#7$lTYm!-e|8jOnjIg40bPHgB*MhJRw6YBLe-kBT~U@ zse-@uPfIM9V#pGmqP{nZP~QEh>BKz*ietNJ6Z_DfwGvsVO0O1^#bf*jl;WyL6+`92 zF;S{PD)^M2ZJ3@wo@-nLYc1s!322Gy-&l^581q2gXFgkrW(G*IjDI8&zz( zl7T(^D!ZKRT)UjOGQFIRK2J=-Aj6@BZatAe1*GsSDbbLG_}lP-DZ&RN+Fi(PXqWiM zRLU2uz`+_nR_vV|S4tL9?oS_Kr*iUgZcvl{^h@HCeNKGleZg+zlq>@|lc~)&2^L*r zW}WVE7sgmC zd@Wm_TfL+lT1*>8e4Gk?Q}SL;dG--aAjCi=Z^)P|djarExFb=_A^L#az^>-zFTO3Z zN!m3Lszr@1<2-Mre*CpO-G37bK(Hhwo=eV zxpys8z(l(M-9;^+D}+%Vgx5#;F-gKpq7mHE)}F5xah^fGR|Mgl`a12_2H{XoJYu(u zj)Cbl>fAeEl|N3Mg8^PNA|Tu)r9&!FvW_Q9{Wa1XBTUQhDapfHP9NPcz5MvF$Pwi$ zC7lueIV&$HYU1=$CZ<&SUA<%Z4T^;p5nUod-)&L*8~F2658LPp+xQGF04j4xdc8+p z?^<5w0{$yi_t(BfY8$QPDYQ9Re?j&1YB+{L8eLTp4A@*r;2*4@aFM!?tuI`v9%9D| z7pj}sUxg*=5;m=BItGOJn5NoXLd#bb8RpH*S;er}c-OKR_s2c)myGn9IZEVMKgF65bjnKo^ zSLIbIxl*8iZ)~tcvZU;^WW|z+6S4=`r&UfzbGGzaZD}jm&sBA5s3Y&`8wvjc+{EPX diff --git a/malloc/src/error_lib.c b/malloc/src/error_lib.c index 055c3abe..adcacf30 100644 --- a/malloc/src/error_lib.c +++ b/malloc/src/error_lib.c @@ -22,7 +22,7 @@ void error_free_notalloc(void *ptr) ft_putstr_fd(", ??? ", fd); ft_putstr_fd(")", fd); ft_putstr_fd(" malloc: error for object ", fd); - ft_putaddr_fd(ptr, fd); + ft_putnbr_hex_fd((long)ptr, fd); ft_putendl_fd(": pointer being freed was not allocated"FG_DEFAULT, fd); /* exit(134); */ } diff --git a/malloc/src/free.c b/malloc/src/free.c index c5f53356..7db65b74 100644 --- a/malloc/src/free.c +++ b/malloc/src/free.c @@ -41,12 +41,14 @@ void free(void *ptr) t_node *node; ft_putstr(FG_YELLOW"free("); - ft_putaddr(ptr); + ft_putnbr_hex((long)ptr); ft_putendl(")"FG_DEFAULT); if (!ptr) return ; node = ptr - HEADER_SIZE; get_zones(&zone_ref, &alloc_ref, node->size); + ft_putstr("zone @"); + *zone_ref ? print_node(BG_MAGENTA, *zone_ref) : ft_putendl(" NULL"); if (remove_node(alloc_ref, node)) { error_free_notalloc(ptr); diff --git a/malloc/src/get_zones.c b/malloc/src/get_zones.c index 52c1f65c..65ed3eab 100644 --- a/malloc/src/get_zones.c +++ b/malloc/src/get_zones.c @@ -31,6 +31,4 @@ void get_zones(t_node ***zone_ref, t_node ***alloc_ref, size_t size) *zone_ref = TINY(size) ? &tiny_zone : &small_zone; *alloc_ref = TINY(size) ? &tiny_alloc : &small_alloc; } - ft_putstr("zone @"); - **zone_ref ? print_node(BG_MAGENTA, **zone_ref) : ft_putendl(" NULL"); } diff --git a/malloc/src/node_lib.c b/malloc/src/node_lib.c index f1fe4216..80dfc51e 100644 --- a/malloc/src/node_lib.c +++ b/malloc/src/node_lib.c @@ -56,9 +56,9 @@ int remove_node(t_node **head, t_node *node) while (*head) { ft_putstr("looking for node; diff=["); - ft_putaddr(node); + ft_putnbr_hex((long)node); ft_putstr(","); - ft_putaddr(*head); + ft_putnbr_hex((long)*head); ft_putendl("]"); if (*head == node) { diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c index ec7797e8..44b16495 100644 --- a/malloc/src/show_alloc_mem.c +++ b/malloc/src/show_alloc_mem.c @@ -23,9 +23,9 @@ void print_node(char color[7], t_node *node) { ft_putstr("\t"); ft_putstr(color); - ft_putaddr(node->data); + ft_putnbr_hex((long)node->data); ft_putstr(" - "); - ft_putaddr(node->data + node->size); + ft_putnbr_hex((long)node->data + node->size); ft_putstr(FBG_DEFAULT" : "); ft_putnbr(node->size); ft_putendl(" bytes"); From 0cacbbeb721f1eb43a8dd2ff01f08507aaa28881 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Mon, 20 Feb 2017 17:11:59 +0100 Subject: [PATCH 09/27] tests/ dir --- malloc/includes/malloc.h | 2 +- malloc/includes/malloc_internal.h | 2 +- malloc/libft_malloc_x86_64_Darwin.so | Bin 13836 -> 13836 bytes malloc/main.c | 20 -------------------- malloc/src/free.c | 2 +- malloc/src/malloc.c | 6 +++++- malloc/src/show_alloc_mem.c | 2 +- malloc/test0.c | 12 ------------ 8 files changed, 9 insertions(+), 37 deletions(-) delete mode 100644 malloc/main.c delete mode 100644 malloc/test0.c diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index 36128d63..c7b46306 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:06 by jhalford #+# #+# */ -/* Updated: 2017/02/18 18:53:22 by jhalford ### ########.fr */ +/* Updated: 2017/02/20 17:03:33 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/includes/malloc_internal.h b/malloc/includes/malloc_internal.h index f81845d1..90247545 100644 --- a/malloc/includes/malloc_internal.h +++ b/malloc/includes/malloc_internal.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:24 by jhalford #+# #+# */ -/* Updated: 2017/02/18 20:06:55 by jhalford ### ########.fr */ +/* Updated: 2017/02/20 17:03:44 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/libft_malloc_x86_64_Darwin.so b/malloc/libft_malloc_x86_64_Darwin.so index 0f30e1deef8e947ee01a727572bbc7346171f01f..ab0778456a06b226e174e8faf46a34036dbb4ab8 100755 GIT binary patch delta 147 zcmV;E0Brw^Y>aHMpac--%_LnJr#EwtWVJWeo0cfEumq+G0d|vD50(P21C#F$Y63$8 zvs)1U0Rlq-lUou>0r!)p5-$jY>_AA11u+eiJrgkk1`CsL6J8?@|Ns9;iv^bq002mf z07yGU_z#5!0000;gTz2x!{`?Z005K04-}Kt5@M4F6k-8mvuYIE9Rtt-V6#Xv!~>%L BGlKvC delta 145 zcmV;C0B-+`Y>aHMpac-p-yJuj`Z(!_nYkMXQGV~Uumq+G0oIdO50(Po0+a6#Y65ct zvs)1U0RnRXlUou>0Vk8D5-*db6JiEHNQ(v043pgwF#@IvlMoYLBd-4c|454kHw*v( zNQ(eSJ4N^pg$4is07!$xKwZP=w+R3Mlfe%blLr)H0mHLu6x$sGV9)`xNHW9&E{`>i diff --git a/malloc/main.c b/malloc/main.c deleted file mode 100644 index def26fb9..00000000 --- a/malloc/main.c +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include "includes/malloc.h" - -int main(void) -{ - void *ptr0 = malloc(4096); - show_alloc_mem(); - - void *ptr1 = malloc(16); - show_alloc_mem(); - - free(ptr0); - show_alloc_mem(); - - void *ptr2 = malloc(16); - show_alloc_mem(); - - void *ptr3 = malloc(32); - show_alloc_mem(); -} diff --git a/malloc/src/free.c b/malloc/src/free.c index c5f53356..1960eedc 100644 --- a/malloc/src/free.c +++ b/malloc/src/free.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ -/* Updated: 2017/02/18 20:10:24 by jhalford ### ########.fr */ +/* Updated: 2017/02/20 16:56:23 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c index 93ad0b58..68f78864 100644 --- a/malloc/src/malloc.c +++ b/malloc/src/malloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/02/18 20:08:49 by jhalford ### ########.fr */ +/* Updated: 2017/02/20 17:11:20 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -55,7 +55,11 @@ void *malloc(size_t size) ft_putstr("found @"); print_node(FG_GREEN, *node_ref); node = split_node(node_ref, alloc_ref, zone_ref, size); + ft_putstr("touser@"); print_node(FG_RED, node); + ft_putstr(FG_YELLOW"passing "); + ft_putnbr_hex((long)node->data); + ft_putendl(" to user"FG_DEFAULT); return (node->data); } diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c index ec7797e8..909c6f40 100644 --- a/malloc/src/show_alloc_mem.c +++ b/malloc/src/show_alloc_mem.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:20 by jhalford #+# #+# */ -/* Updated: 2017/02/18 19:58:20 by jhalford ### ########.fr */ +/* Updated: 2017/02/20 17:11:29 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/test0.c b/malloc/test0.c deleted file mode 100644 index b5830dce..00000000 --- a/malloc/test0.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "includes/malloc.h" - -int main(void) -{ - int i; - char *addr; - - i = 0; - while (i < 1024) - i++; - return (0); -} From 555d3e2cc5465cf938a145877b5d6c84547b79e0 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Mon, 20 Feb 2017 17:12:51 +0100 Subject: [PATCH 10/27] tests/ --- malloc/tests/main.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 malloc/tests/main.c diff --git a/malloc/tests/main.c b/malloc/tests/main.c new file mode 100644 index 00000000..52871fcb --- /dev/null +++ b/malloc/tests/main.c @@ -0,0 +1,20 @@ +#include +#include "../includes/malloc.h" + +int main(void) +{ + void *ptr0 = malloc(4096); + show_alloc_mem(); + + void *ptr1 = malloc(16); + show_alloc_mem(); + + free(ptr0); + show_alloc_mem(); + + void *ptr2 = malloc(16); + show_alloc_mem(); + + void *ptr3 = malloc(32); + show_alloc_mem(); +} From 38220586094fa726e38fdfb9af94338413045705 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Tue, 21 Feb 2017 18:22:11 +0100 Subject: [PATCH 11/27] tests --- malloc/.gitignore | 1 + malloc/Makefile | 7 +++++-- malloc/includes/malloc.h | 9 ++++++++- malloc/includes/malloc_internal.h | 11 ++--------- malloc/libft | 2 +- malloc/run.sh | 5 ----- malloc/src/calloc.c | 21 +++++++++++++++++++++ malloc/src/free.c | 8 ++++---- malloc/src/malloc.c | 19 +++++++++++-------- malloc/src/node_lib.c | 4 ++-- malloc/src/reallocf.c | 21 +++++++++++++++++++++ malloc/src/show_alloc_mem.c | 2 +- malloc/src/valloc.c | 20 ++++++++++++++++++++ malloc/tests/main.c | 20 -------------------- malloc/tests/run.sh | 5 +++++ malloc/tests/test0 | Bin 0 -> 8432 bytes malloc/tests/test0.c | 15 +++++++++++++++ malloc/tests/test1 | Bin 0 -> 8432 bytes malloc/tests/test1.c | 16 ++++++++++++++++ malloc/tests/test2.c | 17 +++++++++++++++++ malloc/tests/test3.5.c | 24 ++++++++++++++++++++++++ malloc/tests/test3.c | 22 ++++++++++++++++++++++ malloc/tests/test4.c | 18 ++++++++++++++++++ malloc/tests/test5.c | 12 ++++++++++++ 24 files changed, 226 insertions(+), 53 deletions(-) delete mode 100755 malloc/run.sh create mode 100644 malloc/src/calloc.c create mode 100644 malloc/src/reallocf.c create mode 100644 malloc/src/valloc.c delete mode 100644 malloc/tests/main.c create mode 100755 malloc/tests/run.sh create mode 100755 malloc/tests/test0 create mode 100644 malloc/tests/test0.c create mode 100755 malloc/tests/test1 create mode 100644 malloc/tests/test1.c create mode 100644 malloc/tests/test2.c create mode 100644 malloc/tests/test3.5.c create mode 100644 malloc/tests/test3.c create mode 100644 malloc/tests/test4.c create mode 100644 malloc/tests/test5.c diff --git a/malloc/.gitignore b/malloc/.gitignore index 0b2c88d2..1b9129a7 100644 --- a/malloc/.gitignore +++ b/malloc/.gitignore @@ -1,2 +1,3 @@ myprogram *.o +libft_malloc_*.so diff --git a/malloc/Makefile b/malloc/Makefile index 8cf4f4e8..9df7aa54 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -7,7 +7,7 @@ ARCH_NAME = libft_malloc_$(HOSTTYPE).so CC = gcc W_FLAGS = -Wall -Wextra -Werror -V_FLAGS = +V_FLAGS = -fvisibility=hidden D_FLAGS = FLAGS = $(W_FLAGS) $(V_FLAGS) $(D_FLAGS) @@ -22,13 +22,16 @@ INC_DIR = includes/ OBJ_DIR = objs/ SRC_BASE = \ +calloc.c\ error_lib.c\ free.c\ get_zones.c\ malloc.c\ node_lib.c\ realloc.c\ -show_alloc_mem.c +reallocf.c\ +show_alloc_mem.c\ +valloc.c SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index c7b46306..eadcded5 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:06 by jhalford #+# #+# */ -/* Updated: 2017/02/20 17:03:33 by jhalford ### ########.fr */ +/* Updated: 2017/02/21 16:12:51 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,9 +15,16 @@ #include "stdlib.h" +# pragma GCC visibility push(default) + +void *calloc(size_t count, size_t size); void free(void *ptr); void *malloc(size_t size); void *realloc(void *ptr, size_t size); +void *reallocf(void *ptr, size_t size); +void *valloc(size_t size); void show_alloc_mem(void); +# pragma GCC visibility pop + #endif diff --git a/malloc/includes/malloc_internal.h b/malloc/includes/malloc_internal.h index 90247545..f2612157 100644 --- a/malloc/includes/malloc_internal.h +++ b/malloc/includes/malloc_internal.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:24 by jhalford #+# #+# */ -/* Updated: 2017/02/20 17:03:44 by jhalford ### ########.fr */ +/* Updated: 2017/02/21 16:11:45 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,14 +43,7 @@ extern t_node *small_zone; extern t_node *tiny_alloc; extern t_node *small_alloc; -# pragma GCC visibility push(default) - -void free(void *ptr); -void *malloc(size_t size); -void *realloc(void *ptr, size_t size); -void show_alloc_mem(void); - -# pragma GCC visibility pop +#include "malloc.h" void get_zones(t_node ***zone_ref, t_node ***alloc_ref, size_t size); diff --git a/malloc/libft b/malloc/libft index 67a19bb3..bfc8ca20 160000 --- a/malloc/libft +++ b/malloc/libft @@ -1 +1 @@ -Subproject commit 67a19bb3e8f4eedde0fcdec6ebfec97a615ad81b +Subproject commit bfc8ca207ab4d39f0140322c0f1d368137304a3c diff --git a/malloc/run.sh b/malloc/run.sh deleted file mode 100755 index 45580df0..00000000 --- a/malloc/run.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -export DYLD_LIBRARY_PATH="." -export DYLD_INSERT_LIBRARIES="libft_malloc.so" -export DYLD_FORCE_FLAT_NAMESPACE=1 -$@ diff --git a/malloc/src/calloc.c b/malloc/src/calloc.c new file mode 100644 index 00000000..caef0b9a --- /dev/null +++ b/malloc/src/calloc.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/21 16:13:00 by jhalford #+# #+# */ +/* Updated: 2017/02/21 16:16:59 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +void *calloc(size_t count, size_t size) +{ + (void)count; + (void)size; + ft_putstr("calloc() called\n"); + return (NULL); +} diff --git a/malloc/src/free.c b/malloc/src/free.c index 309eee4f..740e196f 100644 --- a/malloc/src/free.c +++ b/malloc/src/free.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ -/* Updated: 2017/02/20 16:56:23 by jhalford ### ########.fr */ +/* Updated: 2017/02/21 16:36:51 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -47,8 +47,8 @@ void free(void *ptr) return ; node = ptr - HEADER_SIZE; get_zones(&zone_ref, &alloc_ref, node->size); - ft_putstr("zone @"); - *zone_ref ? print_node(BG_MAGENTA, *zone_ref) : ft_putendl(" NULL"); + /* ft_putstr("zone @"); */ + /* *zone_ref ? print_node(BG_MAGENTA, *zone_ref) : ft_putendl(" NULL"); */ if (remove_node(alloc_ref, node)) { error_free_notalloc(ptr); @@ -56,5 +56,5 @@ void free(void *ptr) } insert_node(zone_ref, node); coalesce_nodes(zone_ref); - ft_putendl(BG_GREEN"SUCCESSFUL FREE"BG_DEFAULT); + /* ft_putendl(BG_GREEN"SUCCESSFUL FREE"BG_DEFAULT); */ } diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c index 68f78864..8d87b509 100644 --- a/malloc/src/malloc.c +++ b/malloc/src/malloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/02/20 17:11:20 by jhalford ### ########.fr */ +/* Updated: 2017/02/21 16:37:32 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,10 +33,10 @@ void add_chunk(t_node **zone_ref, size_t size) if (!(node = mmap(NULL, chunk_size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0))) error_mmap(); - ft_putstr("nchunk@"); node->size = chunk_size; insert_node(zone_ref, node); - print_node(BG_GREEN, node); + /* ft_putstr("nchunk@"); */ + /* print_node(BG_GREEN, node); */ } void *malloc(size_t size) @@ -49,17 +49,20 @@ void *malloc(size_t size) ft_putstr(FG_YELLOW"malloc("); ft_putnbr(size); ft_putendl(")"FG_DEFAULT); + get_zones(&zone_ref, &alloc_ref, size); while (!*(node_ref = find_node_firstfit(zone_ref, size))) add_chunk(zone_ref, size); - ft_putstr("found @"); - print_node(FG_GREEN, *node_ref); + + /* ft_putstr("found @"); */ + /* print_node(FG_GREEN, *node_ref); */ + node = split_node(node_ref, alloc_ref, zone_ref, size); ft_putstr("touser@"); print_node(FG_RED, node); - ft_putstr(FG_YELLOW"passing "); - ft_putnbr_hex((long)node->data); - ft_putendl(" to user"FG_DEFAULT); + /* ft_putstr("passing "FG_RED); */ + /* ft_putnbr_hex((long)node->data); */ + /* ft_putendl(FG_DEFAULT" to user"); */ return (node->data); } diff --git a/malloc/src/node_lib.c b/malloc/src/node_lib.c index 80dfc51e..f12cdabd 100644 --- a/malloc/src/node_lib.c +++ b/malloc/src/node_lib.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:15 by jhalford #+# #+# */ -/* Updated: 2017/02/18 20:08:46 by jhalford ### ########.fr */ +/* Updated: 2017/02/21 16:07:24 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -55,7 +55,7 @@ int remove_node(t_node **head, t_node *node) { while (*head) { - ft_putstr("looking for node; diff=["); + ft_putstr("looking for node -> ["); ft_putnbr_hex((long)node); ft_putstr(","); ft_putnbr_hex((long)*head); diff --git a/malloc/src/reallocf.c b/malloc/src/reallocf.c new file mode 100644 index 00000000..bc8e9e0b --- /dev/null +++ b/malloc/src/reallocf.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* reallocf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/21 16:13:44 by jhalford #+# #+# */ +/* Updated: 2017/02/21 16:15:30 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +void *reallocf(void *ptr, size_t size) +{ + (void)ptr; + (void)size; + ft_putstr("reaallocf() called\n"); + return (NULL); +} diff --git a/malloc/src/show_alloc_mem.c b/malloc/src/show_alloc_mem.c index 3c016865..29bc3643 100644 --- a/malloc/src/show_alloc_mem.c +++ b/malloc/src/show_alloc_mem.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:20 by jhalford #+# #+# */ -/* Updated: 2017/02/20 17:11:29 by jhalford ### ########.fr */ +/* Updated: 2017/02/21 16:37:55 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/src/valloc.c b/malloc/src/valloc.c new file mode 100644 index 00000000..f9062d67 --- /dev/null +++ b/malloc/src/valloc.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* valloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/21 16:14:26 by jhalford #+# #+# */ +/* Updated: 2017/02/21 16:16:59 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +void *valloc(size_t size) +{ + (void)size; + ft_putstr("valloc() called\n"); + return (NULL); +} diff --git a/malloc/tests/main.c b/malloc/tests/main.c deleted file mode 100644 index 52871fcb..00000000 --- a/malloc/tests/main.c +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include "../includes/malloc.h" - -int main(void) -{ - void *ptr0 = malloc(4096); - show_alloc_mem(); - - void *ptr1 = malloc(16); - show_alloc_mem(); - - free(ptr0); - show_alloc_mem(); - - void *ptr2 = malloc(16); - show_alloc_mem(); - - void *ptr3 = malloc(32); - show_alloc_mem(); -} diff --git a/malloc/tests/run.sh b/malloc/tests/run.sh new file mode 100755 index 00000000..837aeda7 --- /dev/null +++ b/malloc/tests/run.sh @@ -0,0 +1,5 @@ +#!/bin/sh +# export DYLD_LIBRARY_PATH=$HOME"/42/libft_malloc/" +export DYLD_INSERT_LIBRARIES=$HOME"/42/libft_malloc/libft_malloc.so" +export DYLD_FORCE_FLAT_NAMESPACE=1 +$@ diff --git a/malloc/tests/test0 b/malloc/tests/test0 new file mode 100755 index 0000000000000000000000000000000000000000..a4728a4279e8e779d62321cdca298b6419158e9d GIT binary patch literal 8432 zcmeHM&ubGw6rQwIOIu7TDD@|6v7#QD7E0+ckuIiKYHKTqAY;;QNnn%K{LuCwREl7f zVvZiY2p;?cdb6NV@Z!P0q0)kac#t4s{J!0pbdzeYBFuxgZ{C|XZ{B`03$yb+{P^w8Q8~^3w1r#Gqs5o)#V8(3&m2ZP&YNld!phU zR32K_1KL$Q-S5YfX~$i3@^EU7S5fg!r~uT7d!6>=SIXVb!8;ounyQG_1IG8Tv=GorWRbeSj_)5o({u}#qpYm zmp7j>Na-f`ixcM#2CqaF8-;R$>T(w8X^q#ZSygD)Hq_4gZj1$bO7vIGI z`z(L%cE}#;iY&|jW(FYXN9@_3hR%Jr4mkqZ37!N8iN2bH_F(&!)wF+A=V3^6i7s%o zRLDo&Oe#9J?9M?aodh$Fk8c*gO?)4WK07+}a<<2rJO^6@EIK zYp3r*#HVY0NythX53%zJj{bkiDe9o0 z_jL$5o3=r~AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg{{;fwy^$# zUHdj}YSqF;3!_kIQGZ3DP~>umX!^eQ?i=5X)?T;=&YXMBJ@>oke(yebbMKd5KmHsN zBGf3ve1j089Xin@#1mnnCB!jk3@YVt^tv@>-M+u$U@#T{?d z#)R@wn>YYPNv=p)uxAU(fvLyq!vcsmtWxOvW8F}bm{(n{kuqN>CiB%$J>IgyJE$^z z-yhJd@ce!cPo`{V#?B$B9`B{XJFWoellQ9Zs;`)Rkj_rYboTx9 zFI@fQbJ&DR*&mHZt6@RDYo3GuJOa-Fd!&jjW!91TxlD4}ku!zdKkVcf0e{b#b?byr+4hVePOz>nycfOfGrhT+ zVUN;RVwx^>q8FBV-MkeJPeC2(FTna^SOwV zPDZBYoGJK}6HwOi=I5*NYtOH|dmUMKo-Un>pFzxkiq;layM3QA$a$=n|@QLmQPq-XlHKBKRTB$*qNTIJ*Xp{L=xmIl=DrP9)A~_8S9tVx_OKh403O^_!({SY?{WkIMY|Z(j<-S!J`dvDt}stYmG+7Om}d(Y-iS zUU(lW4VAY(S1Of@Yq5oo#`uRy_#pwr;L@oyOmwsoz6ZOUVsPslGQIyNC+S0imfz+4 zZodReeWAYL+2((vHhixeP$kudAD~^qm_0j!NxH2W&Gy|Fe&46Y=GoTsJ3}^;4 z1DXNNz`kOjqstg!!5w|PJajL^WfJ$zxV#?8iDi*9I{IWL;W*Qi@E{?H`}hW#NlAOw zo-7t@+;u0I-kC|Hvm(qxh(@t?nz<0a!Ek%Xy?J!c7mm2TcV5Bs2A*TUR*xQdPZ{(* YSOhVIZ4)=nyK6wDsKKvy*NQOiFA;9N`Tzg` literal 0 HcmV?d00001 diff --git a/malloc/tests/test1.c b/malloc/tests/test1.c new file mode 100644 index 00000000..acd19226 --- /dev/null +++ b/malloc/tests/test1.c @@ -0,0 +1,16 @@ +#include "../includes/malloc.h" + +int main(void) +{ + int i; + char *addr; + + i = 0; + while (i < 1024) + { + addr = (char*)malloc(1024); + addr[0] = 42; + i++; + } + return (0); +} diff --git a/malloc/tests/test2.c b/malloc/tests/test2.c new file mode 100644 index 00000000..c65bdc0e --- /dev/null +++ b/malloc/tests/test2.c @@ -0,0 +1,17 @@ +#include "../includes/malloc.h" + +int main(void) +{ + int i; + char *addr; + + i = 0; + while (i < 1024) + { + addr = (char*)malloc(1024); + addr[0] = 42; + free(addr); + i++; + } + return (0); +} diff --git a/malloc/tests/test3.5.c b/malloc/tests/test3.5.c new file mode 100644 index 00000000..302b3945 --- /dev/null +++ b/malloc/tests/test3.5.c @@ -0,0 +1,24 @@ +#include "../includes/malloc.h" + +#define M (1024 * 1024) + +void print(char *s) +{ + write(1, s, strlen(s)); +} + +int main(void) +{ + char *addr1; + char *addr2; + char *addr3; + + addr1 = (char*)malloc(16*M); + strcpy(addr1, "Bonjours\n"); + print(addr1); + addr2 = (char*)malloc(16*M); + addr3 = (char*)realloc(addr, 128*M); + addr3[127*M] = 42; + printf(addr3); + return (0); +} diff --git a/malloc/tests/test3.c b/malloc/tests/test3.c new file mode 100644 index 00000000..93f1cc1d --- /dev/null +++ b/malloc/tests/test3.c @@ -0,0 +1,22 @@ +#include "../includes/malloc.h" + +#define M (1024 * 1024) + +void print(char *s) +{ + write(1, s, strlen(s)); +} + +int main(void) +{ + char *addr1; + char *addr3; + + addr1 = (char*)malloc(16*M); + strcpy(addr1, "Bonjours\n"); + print(addr1); + addr3 = (char*)realloc(addr, 128*M); + addr3[127*M] = 42; + printf(addr3); + return (0); +} diff --git a/malloc/tests/test4.c b/malloc/tests/test4.c new file mode 100644 index 00000000..f150e7a6 --- /dev/null +++ b/malloc/tests/test4.c @@ -0,0 +1,18 @@ +#include "../includes/malloc.h" + +void print(char *s) +{ + write(1, s, strlen(s)); +} + +int main(void) +{ + char *addr; + + addr = malloc(16); + free(NULL); + free((void*)addr + 5); + if (realloc((void*)addr + 5, 10) == NULL) + print("Bonjours\n"); + return (0); +} diff --git a/malloc/tests/test5.c b/malloc/tests/test5.c new file mode 100644 index 00000000..e01aadb9 --- /dev/null +++ b/malloc/tests/test5.c @@ -0,0 +1,12 @@ +#include "../includes/malloc.h" + +int main(void) +{ + malloc(1024); + malloc(1024 * 32); + malloc(1024 * 1024); + malloc(1024 * 1024 * 16); + malloc(1024 * 1024 * 128); + show_alloc_mem(); + return (0); +} From 829b295aa10bc42aa25462d54bb27906e93f1bf2 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Wed, 1 Mar 2017 12:18:03 +0100 Subject: [PATCH 12/27] removed debug messages and extra functions --- malloc/Makefile | 5 +---- malloc/includes/malloc.h | 8 ++++---- malloc/includes/malloc_internal.h | 2 +- malloc/run.sh | 5 +++++ malloc/src/calloc.c | 21 --------------------- malloc/src/free.c | 10 +++++----- malloc/src/malloc.c | 12 ++++++------ malloc/src/node_lib.c | 12 ++++++------ malloc/src/realloc.c | 2 +- malloc/src/reallocf.c | 21 --------------------- malloc/src/valloc.c | 20 -------------------- malloc/tests/run.sh | 5 ----- malloc/tests/test0 | Bin 8432 -> 8432 bytes 13 files changed, 29 insertions(+), 94 deletions(-) create mode 100755 malloc/run.sh delete mode 100644 malloc/src/calloc.c delete mode 100644 malloc/src/reallocf.c delete mode 100644 malloc/src/valloc.c delete mode 100755 malloc/tests/run.sh diff --git a/malloc/Makefile b/malloc/Makefile index 9df7aa54..fc153c17 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -22,16 +22,13 @@ INC_DIR = includes/ OBJ_DIR = objs/ SRC_BASE = \ -calloc.c\ error_lib.c\ free.c\ get_zones.c\ malloc.c\ node_lib.c\ realloc.c\ -reallocf.c\ -show_alloc_mem.c\ -valloc.c +show_alloc_mem.c SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index eadcded5..4fc97179 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:06 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:12:51 by jhalford ### ########.fr */ +/* Updated: 2017/03/01 12:01:58 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,9 +20,9 @@ void *calloc(size_t count, size_t size); void free(void *ptr); void *malloc(size_t size); -void *realloc(void *ptr, size_t size); -void *reallocf(void *ptr, size_t size); -void *valloc(size_t size); +/* void *realloc(void *ptr, size_t size); */ +/* void *reallocf(void *ptr, size_t size); */ +/* void *valloc(size_t size); */ void show_alloc_mem(void); # pragma GCC visibility pop diff --git a/malloc/includes/malloc_internal.h b/malloc/includes/malloc_internal.h index f2612157..ea3edd95 100644 --- a/malloc/includes/malloc_internal.h +++ b/malloc/includes/malloc_internal.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:24 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:11:45 by jhalford ### ########.fr */ +/* Updated: 2017/03/01 12:03:35 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/run.sh b/malloc/run.sh new file mode 100755 index 00000000..19faa239 --- /dev/null +++ b/malloc/run.sh @@ -0,0 +1,5 @@ +#!/bin/sh +export DYLD_LIBRARY_PATH=. +export DYLD_INSERT_LIBRARIES="libft_malloc.so" +export DYLD_FORCE_FLAT_NAMESPACE=1 +$@ diff --git a/malloc/src/calloc.c b/malloc/src/calloc.c deleted file mode 100644 index caef0b9a..00000000 --- a/malloc/src/calloc.c +++ /dev/null @@ -1,21 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* calloc.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2017/02/21 16:13:00 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:16:59 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "malloc_internal.h" - -void *calloc(size_t count, size_t size) -{ - (void)count; - (void)size; - ft_putstr("calloc() called\n"); - return (NULL); -} diff --git a/malloc/src/free.c b/malloc/src/free.c index 740e196f..79491db3 100644 --- a/malloc/src/free.c +++ b/malloc/src/free.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:36:51 by jhalford ### ########.fr */ +/* Updated: 2017/03/01 12:04:36 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,9 +40,9 @@ void free(void *ptr) t_node **alloc_ref; t_node *node; - ft_putstr(FG_YELLOW"free("); - ft_putnbr_hex((long)ptr); - ft_putendl(")"FG_DEFAULT); + /* ft_putstr(FG_YELLOW"free("); */ + /* ft_putnbr_hex((long)ptr); */ + /* ft_putendl(")"FG_DEFAULT); */ if (!ptr) return ; node = ptr - HEADER_SIZE; @@ -51,7 +51,7 @@ void free(void *ptr) /* *zone_ref ? print_node(BG_MAGENTA, *zone_ref) : ft_putendl(" NULL"); */ if (remove_node(alloc_ref, node)) { - error_free_notalloc(ptr); + /* error_free_notalloc(ptr); */ return ; } insert_node(zone_ref, node); diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c index 8d87b509..e6671c57 100644 --- a/malloc/src/malloc.c +++ b/malloc/src/malloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:37:32 by jhalford ### ########.fr */ +/* Updated: 2017/03/01 12:15:24 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -46,9 +46,9 @@ void *malloc(size_t size) t_node **node_ref; t_node *node; - ft_putstr(FG_YELLOW"malloc("); - ft_putnbr(size); - ft_putendl(")"FG_DEFAULT); + /* ft_putstr(FG_YELLOW"malloc("); */ + /* ft_putnbr(size); */ + /* ft_putendl(")"FG_DEFAULT); */ get_zones(&zone_ref, &alloc_ref, size); while (!*(node_ref = find_node_firstfit(zone_ref, size))) @@ -59,8 +59,8 @@ void *malloc(size_t size) node = split_node(node_ref, alloc_ref, zone_ref, size); - ft_putstr("touser@"); - print_node(FG_RED, node); + /* ft_putstr("touser@"); */ + /* print_node(FG_RED, node); */ /* ft_putstr("passing "FG_RED); */ /* ft_putnbr_hex((long)node->data); */ /* ft_putendl(FG_DEFAULT" to user"); */ diff --git a/malloc/src/node_lib.c b/malloc/src/node_lib.c index f12cdabd..9597114a 100644 --- a/malloc/src/node_lib.c +++ b/malloc/src/node_lib.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:15 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:07:24 by jhalford ### ########.fr */ +/* Updated: 2017/03/01 12:04:08 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -55,11 +55,11 @@ int remove_node(t_node **head, t_node *node) { while (*head) { - ft_putstr("looking for node -> ["); - ft_putnbr_hex((long)node); - ft_putstr(","); - ft_putnbr_hex((long)*head); - ft_putendl("]"); + /* ft_putstr("looking for node -> ["); */ + /* ft_putnbr_hex((long)node); */ + /* ft_putstr(","); */ + /* ft_putnbr_hex((long)*head); */ + /* ft_putendl("]"); */ if (*head == node) { *head = (*head)->next; diff --git a/malloc/src/realloc.c b/malloc/src/realloc.c index ffd0a757..dedb3e5b 100644 --- a/malloc/src/realloc.c +++ b/malloc/src/realloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/18 13:23:20 by jhalford #+# #+# */ -/* Updated: 2017/02/18 18:08:11 by jhalford ### ########.fr */ +/* Updated: 2017/03/01 12:15:31 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/src/reallocf.c b/malloc/src/reallocf.c deleted file mode 100644 index bc8e9e0b..00000000 --- a/malloc/src/reallocf.c +++ /dev/null @@ -1,21 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* reallocf.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2017/02/21 16:13:44 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:15:30 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "malloc_internal.h" - -void *reallocf(void *ptr, size_t size) -{ - (void)ptr; - (void)size; - ft_putstr("reaallocf() called\n"); - return (NULL); -} diff --git a/malloc/src/valloc.c b/malloc/src/valloc.c deleted file mode 100644 index f9062d67..00000000 --- a/malloc/src/valloc.c +++ /dev/null @@ -1,20 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* valloc.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2017/02/21 16:14:26 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:16:59 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "malloc_internal.h" - -void *valloc(size_t size) -{ - (void)size; - ft_putstr("valloc() called\n"); - return (NULL); -} diff --git a/malloc/tests/run.sh b/malloc/tests/run.sh deleted file mode 100755 index 837aeda7..00000000 --- a/malloc/tests/run.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -# export DYLD_LIBRARY_PATH=$HOME"/42/libft_malloc/" -export DYLD_INSERT_LIBRARIES=$HOME"/42/libft_malloc/libft_malloc.so" -export DYLD_FORCE_FLAT_NAMESPACE=1 -$@ diff --git a/malloc/tests/test0 b/malloc/tests/test0 index a4728a4279e8e779d62321cdca298b6419158e9d..26fd3f0de80ad2cbe6f181ede4a1aa48727f6217 100755 GIT binary patch delta 77 zcmV-T0J8t^LGVEp&-(5D2LJ#80{{Sk0ssI24*&oFV6hd;0}#kyO&6)ZHNuZ|-pV)( j!CjN^14y%Q1kehT&;&TMKo7_e0TGi4AeI3Elb|3_Fwq+p delta 111 zcmez1_`y;1{I9qF*cliYnHd-wm>3us1b}$PM$yyE0+;s}eDeEdsNXMYvNTyDHDK}w zW)D@MEEwcuCZ(0c=O*Ul Date: Wed, 1 Mar 2017 12:18:43 +0100 Subject: [PATCH 13/27] removed test executables --- malloc/tests/test0 | Bin 8432 -> 0 bytes malloc/tests/test1 | Bin 8432 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 malloc/tests/test0 delete mode 100755 malloc/tests/test1 diff --git a/malloc/tests/test0 b/malloc/tests/test0 deleted file mode 100755 index 26fd3f0de80ad2cbe6f181ede4a1aa48727f6217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8432 zcmeHMT}xC!7@nh6qLS-P-^EEXstYwJ@X`$rtz@NX5P^)ldSVyOuC^bg7l9!`TS)s8 zx-94ic$a;E;Z6UbJ42zM%O#@qdCr+Ro?Xj(VP1Imo%fx0o|$=O7Us-+{r&UrAt9`0 zAr_m25S`Ge79pMq8zmu*LlaObN8{I>`_7%)jMj@)@BY&x&T}M6IpN%!s88|R$LeE3 z`52ox0L74ek+SH{7nK9kh&PA{5N}we(ARDKP>WbpRlbq3P%NbiVW<)Bg~B_iGPJK7 zv?@GZAK=Nf>&>}&BsJny6y6C1K%cyavTJ;$+~Z7cMrLvkW|7p0_fFw)jVSc%@Pcso z%XQdtKK&>j_es>>*|#IZw{AE?!+Ouz4fBLg`4t#Joanf^@xSP2ogMVu3VV#c z65IBv6aBEvBloON!{@$RfgONthmJy{!d$J5=%eq6&|F^YirIQ&S1@{(rn^1EfQsC^XZc+zXm#&d2D~_RF_t*vQypK zsMTthR})L0?a5D-TF)XXN0v`Ngo%&WdXlh}G=9X^cO(YiC8y{^qL$}zp4YFyQu&Qa zVVU1V9XO}Qpi07m4n*y1wB0iynrzC30mFb{z%XDKFbo(53GHFkl!k4D1UA zy1HXy9B9`d9}oS`%%-I~?@pJBF5bG6 zOh21VW^$s3ml4fk^$c?%y1;O!<-a`o_X|gSKe)HxeFN_^V8g2izEej102V zUHdj}YSqF;3!_kIQGZ3DP~>umX!^eQ?i=5X)?T;=&YXMBJ@>oke(yebbMKd5KmHsN zBGf3ve1j089Xin@#1mnnCB!jk3@YVt^tv@>-M+u$U@#T{?d z#)R@wn>YYPNv=p)uxAU(fvLyq!vcsmtWxOvW8F}bm{(n{kuqN>CiB%$J>IgyJE$^z z-yhJd@ce!cPo`{V#?B$B9`B{XJFWoellQ9Zs;`)Rkj_rYboTx9 zFI@fQbJ&DR*&mHZt6@RDYo3GuJOa-Fd!&jjW!91TxlD4}ku!zdKkVcf0e{b#b?byr+4hVePOz>nycfOfGrhT+ zVUN;RVwx^>q8FBV-MkeJPeC2(FTna^SOwV zPDZBYoGJK}6HwOi=I5*NYtOH|dmUMKo-Un>pFzxkiq;layM3QA$a$=n|@QLmQPq-XlHKBKRTB$*qNTIJ*Xp{L=xmIl=DrP9)A~_8S9tVx_OKh403O^_!({SY?{WkIMY|Z(j<-S!J`dvDt}stYmG+7Om}d(Y-iS zUU(lW4VAY(S1Of@Yq5oo#`uRy_#pwr;L@oyOmwsoz6ZOUVsPslGQIyNC+S0imfz+4 zZodReeWAYL+2((vHhixeP$kudAD~^qm_0j!NxH2W&Gy|Fe&46Y=GoTsJ3}^;4 z1DXNNz`kOjqstg!!5w|PJajL^WfJ$zxV#?8iDi*9I{IWL;W*Qi@E{?H`}hW#NlAOw zo-7t@+;u0I-kC|Hvm(qxh(@t?nz<0a!Ek%Xy?J!c7mm2TcV5Bs2A*TUR*xQdPZ{(* YSOhVIZ4)=nyK6wDsKKvy*NQOiFA;9N`Tzg` From 84732a076da4f6c5a5cc93644c09937187df2db8 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Fri, 31 Mar 2017 18:21:43 +0200 Subject: [PATCH 14/27] new makefile --- malloc/Makefile | 91 ++++++++++++++++++--------- malloc/includes/malloc.h | 2 +- malloc/libft | 2 +- malloc/{src => srcs}/error_lib.c | 0 malloc/{src => srcs}/free.c | 0 malloc/{src => srcs}/get_zones.c | 0 malloc/{src => srcs}/malloc.c | 0 malloc/{src => srcs}/node_lib.c | 0 malloc/{src => srcs}/realloc.c | 0 malloc/{src => srcs}/show_alloc_mem.c | 0 10 files changed, 62 insertions(+), 33 deletions(-) rename malloc/{src => srcs}/error_lib.c (100%) rename malloc/{src => srcs}/free.c (100%) rename malloc/{src => srcs}/get_zones.c (100%) rename malloc/{src => srcs}/malloc.c (100%) rename malloc/{src => srcs}/node_lib.c (100%) rename malloc/{src => srcs}/realloc.c (100%) rename malloc/{src => srcs}/show_alloc_mem.c (100%) diff --git a/malloc/Makefile b/malloc/Makefile index fc153c17..c3323dcb 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -1,23 +1,37 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: wescande +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2016/08/29 21:32:58 by wescande #+# #+# # +# Updated: 2017/03/31 18:08:35 by jhalford ### ########.fr # +# # +# **************************************************************************** # + ifeq ($(HOSTTYPE),) -HOSTTYPE := $(shell uname -m)_$(shell uname -s) + HOSTTYPE := $(shell uname -m)_$(shell uname -s) endif -NAME = libft_malloc.so -ARCH_NAME = libft_malloc_$(HOSTTYPE).so +NAME_BIS = libft_malloc.so +NAME = libft_malloc_$(HOSTTYPE).so CC = gcc -W_FLAGS = -Wall -Wextra -Werror -V_FLAGS = -fvisibility=hidden -D_FLAGS = -FLAGS = $(W_FLAGS) $(V_FLAGS) $(D_FLAGS) +FLAGS = -Wall -Wextra -Werror #-fsanitize=address +MAIN_FLAGS = -shared +OBJ_FLAGS = -DELTA = $$(echo "$$(tput cols)-47"|bc) +LEN_NAME = `printf "%s" $(NAME) |wc -c` +DELTA = $$(echo "$$(tput cols)-31-$(LEN_NAME)"|bc) LIBFT_DIR = libft/ LIBFT_LIB = $(LIBFT_DIR)libft.a LIBFT_INC = $(LIBFT_DIR)includes/ -SRC_DIR = src/ +LIBS = + +SRC_DIR = srcs/ INC_DIR = includes/ OBJ_DIR = objs/ @@ -36,47 +50,65 @@ NB = $(words $(SRC_BASE)) INDEX = 0 all : + @make -C $(LIBFT_DIR) @make -j $(NAME) + @make $(NAME_BIS) -$(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) - @$(CC) --shared $(FLAGS)\ +$(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) + @$(CC) $(OBJS) -o $(NAME) \ -I $(INC_DIR) \ -I $(LIBFT_INC) \ - $(LIBS) \ - $(LIBFT_LIB) $(OBJS) \ - -o $(ARCH_NAME) - @ln -fs $(ARCH_NAME) $(NAME) - @strip -x $(NAME) - @printf "\r\e[48;5;15;38;5;25m✅ MAKE $(ARCH_NAME)\e[0m\e[K\n" + $(LIBS) $(LIBFT_LIB) $(MAIN_FLAGS) $(FLAGS) + @printf "\r\033[38;5;117m✓ MAKE $(NAME)\033[0m\033[K\n" + +$(NAME_BIS): $(NAME) + @if [ -L $(NAME_BIS) ]; \ + then \ + rm $(NAME_BIS); \ + fi + @ln -s $(NAME) $(NAME_BIS) + @printf "\r\033[38;5;117m✓ LINK $(NAME_BIS)\033[0m\033[K\n" $(LIBFT_LIB): - @make -j -C $(LIBFT_DIR) + @make -C $(LIBFT_DIR) -$(OBJ_DIR): +$(OBJ_DIR) : @mkdir -p $(OBJ_DIR) @mkdir -p $(dir $(OBJS)) $(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) @$(eval DONE=$(shell echo $$(($(INDEX)*20/$(NB))))) @$(eval PERCENT=$(shell echo $$(($(INDEX)*100/$(NB))))) - @$(eval COLOR=$(shell echo $$(($(PERCENT)%35+196)))) - @$(eval TO_DO=$(shell echo $$((20-$(INDEX)*20/$(NB))))) - @printf "\r\e[38;5;11m⌛ MAKE %10.10s : %2d%% \e[48;5;%dm%*s\e[0m%*s\e[48;5;255m \e[0m \e[38;5;11m %*s\e[0m\e[K" $(NAME) $(PERCENT) $(COLOR) $(DONE) "" $(TO_DO) "" $(DELTA) "$@" - @$(CC) $(FLAGS) -MMD -c $< -o $@\ + @$(eval TO_DO=$(shell echo $$((20-$(INDEX)*20/$(NB) - 1)))) + @$(eval COLOR=$(shell list=(160 196 202 208 215 221 226 227 190 154 118 82 46); index=$$(($(PERCENT) * $${#list[@]} / 100)); echo "$${list[$$index]}")) + @printf "\r\033[38;5;%dm⌛ [%s]: %2d%% `printf '█%.0s' {0..$(DONE)}`%*s❙%*.*s\033[0m\033[K" $(COLOR) $(NAME) $(PERCENT) $(TO_DO) "" $(DELTA) $(DELTA) "$(shell echo "$@" | sed 's/^.*\///')" + @$(CC) $(FLAGS) $(OBJ_FLAG) -MMD -c $< -o $@\ -I $(INC_DIR)\ -I $(LIBFT_INC) @$(eval INDEX=$(shell echo $$(($(INDEX)+1)))) clean: cleanlib - @rm -rf $(OBJ_DIR) - @printf "\r\e[38;5;202m✖ clean $(NAME).\e[0m\e[K\n" + @if [ -e $(OBJ_DIR) ]; \ + then \ + rm -rf $(OBJ_DIR); \ + printf "\r\033[38;5;202m✗ clean $(NAME).\033[0m\033[K\n"; \ + fi; cleanlib: @make -C $(LIBFT_DIR) clean fclean: clean fcleanlib - @rm -f $(NAME) - @printf "\r\e[38;5;196m❌ fclean $(NAME).\e[0m\e[K\n" + @if [ -e $(NAME) ]; \ + then \ + rm -rf $(NAME); \ + printf "\r\033[38;5;196m✗ fclean $(NAME).\033[0m\033[K\n"; \ + fi; + @if [ -L $(NAME_BIS) ]; \ + then \ + rm -rf $(NAME_BIS); \ + printf "\r\033[38;5;196m✗ delete link $(NAME_BIS).\033[0m\033[K\n"; \ + fi; + @$(foreach n, $(shell echo libft_malloc_*.so), if [ -f $n ]; then rm -rf $n; printf "\r\033[38;5;196m✗ delete old lib $n.\033[0m\033[K\n"; fi;) fcleanlib: cleanlib @make -C $(LIBFT_DIR) fclean @@ -85,9 +117,6 @@ re: fclean all relib: fcleanlib $(LIBFT_LIB) -test: - gcc -lft_malloc -L. -Iincludes -I$(LIBFT_INC) -o myprogram main.c - -.PHONY : fclean clean re relib cleanlib fcleanlib $(LIBFT_LIB) +.PHONY : fclean clean re relib cleanlib fcleanlib -include $(OBJS:.o=.d) diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index 4fc97179..f9ac2f05 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:06 by jhalford #+# #+# */ -/* Updated: 2017/03/01 12:01:58 by jhalford ### ########.fr */ +/* Updated: 2017/03/06 17:43:23 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/libft b/malloc/libft index bfc8ca20..a9659d8c 160000 --- a/malloc/libft +++ b/malloc/libft @@ -1 +1 @@ -Subproject commit bfc8ca207ab4d39f0140322c0f1d368137304a3c +Subproject commit a9659d8c5f0abaabc7c23c2ff8526e48675a994e diff --git a/malloc/src/error_lib.c b/malloc/srcs/error_lib.c similarity index 100% rename from malloc/src/error_lib.c rename to malloc/srcs/error_lib.c diff --git a/malloc/src/free.c b/malloc/srcs/free.c similarity index 100% rename from malloc/src/free.c rename to malloc/srcs/free.c diff --git a/malloc/src/get_zones.c b/malloc/srcs/get_zones.c similarity index 100% rename from malloc/src/get_zones.c rename to malloc/srcs/get_zones.c diff --git a/malloc/src/malloc.c b/malloc/srcs/malloc.c similarity index 100% rename from malloc/src/malloc.c rename to malloc/srcs/malloc.c diff --git a/malloc/src/node_lib.c b/malloc/srcs/node_lib.c similarity index 100% rename from malloc/src/node_lib.c rename to malloc/srcs/node_lib.c diff --git a/malloc/src/realloc.c b/malloc/srcs/realloc.c similarity index 100% rename from malloc/src/realloc.c rename to malloc/srcs/realloc.c diff --git a/malloc/src/show_alloc_mem.c b/malloc/srcs/show_alloc_mem.c similarity index 100% rename from malloc/src/show_alloc_mem.c rename to malloc/srcs/show_alloc_mem.c From 202e63f291dc5ff6d00efce38bf8a40c8a2df275 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Fri, 31 Mar 2017 23:35:51 +0200 Subject: [PATCH 15/27] new libft --- malloc/libft | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malloc/libft b/malloc/libft index a9659d8c..3cfcbb41 160000 --- a/malloc/libft +++ b/malloc/libft @@ -1 +1 @@ -Subproject commit a9659d8c5f0abaabc7c23c2ff8526e48675a994e +Subproject commit 3cfcbb41103be5a16a8666b317ee397e9886fa4f From 631792b8313f01050f5ab25a266bd24b56264638 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sat, 1 Apr 2017 18:49:10 +0200 Subject: [PATCH 16/27] new chunk management --- malloc/Makefile | 2 +- malloc/includes/malloc_internal.h | 53 +++++++-------- malloc/run.sh | 5 +- malloc/srcs/free.c | 53 +++++++-------- malloc/srcs/{get_zones.c => get_zone.c} | 28 ++++---- malloc/srcs/malloc.c | 68 ++++++++------------ malloc/srcs/node_lib.c | 85 ++++++++++--------------- malloc/srcs/show_alloc_mem.c | 4 +- malloc/tests/test0.c | 1 - 9 files changed, 124 insertions(+), 175 deletions(-) rename malloc/srcs/{get_zones.c => get_zone.c} (68%) diff --git a/malloc/Makefile b/malloc/Makefile index c3323dcb..71ce5fc7 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -38,7 +38,7 @@ OBJ_DIR = objs/ SRC_BASE = \ error_lib.c\ free.c\ -get_zones.c\ +get_zone.c\ malloc.c\ node_lib.c\ realloc.c\ diff --git a/malloc/includes/malloc_internal.h b/malloc/includes/malloc_internal.h index ea3edd95..63fb3fd7 100644 --- a/malloc/includes/malloc_internal.h +++ b/malloc/includes/malloc_internal.h @@ -13,44 +13,47 @@ #ifndef MALLOC_INTERNAL_H # define MALLOC_INTERNAL_H -# define malloc_n 64 -# define malloc_m 1024 -# define malloc_N (1 * getpagesize()) -# define malloc_M (2 * getpagesize()) -# define malloc_magic 1234567 -# define HEADER_SIZE (sizeof(t_node) - alignof(t_node)) -# define TINY(x) (x < (malloc_n + 1)) -# define SMALL(x) (!TINY(x) && !LARGE(x)) -# define LARGE(x) (malloc_m < x) +# define M_NTINY (64) +# define M_NSMALL (1024) +# define M_PAGEALIGN(x) ((x / getpagesize() + 1) * getpagesize()) +# define M_TINYCHUNK (M_PAGEALIGN(101 * M_NTINY)) +# define M_SMALLCHUNK (M_PAGEALIGN(101 * M_NSMALL)) +# define M_MAGIC 1234567 +# define M_CHUNKHEAD (sizeof(t_chunk) - alignof(t_chunk)) +# define M_NODEHEAD (sizeof(t_node) - alignof(t_node)) +# define M_ISTINY(x) (x < (M_NTINY + 1)) +# define M_ISSMALL(x) (!M_TINY(x) && !M_LARGE(x)) +# define M_ISLARGE(x) (M_SMALL < x) #include "libft.h" #include #include -typedef struct s_header { - int size; - int magic; -} t_header; +typedef struct s_chunk { + struct s_chunk *next; +} t_chunk; typedef struct s_node { - int size; struct s_node *next; - char data[1]; + size_t size; + int isfree:1; } t_node; -extern t_node *tiny_zone; -extern t_node *small_zone; -extern t_node *tiny_alloc; -extern t_node *small_alloc; +enum e_zones { + M_TINY, + M_SMALL, + M_LARGE, + M_ZONES_MAX, +}; + +extern t_chunk *g_zones[M_ZONES_MAX]; #include "malloc.h" -void get_zones(t_node ***zone_ref, t_node ***alloc_ref, size_t size); - -void insert_node(t_node **head, t_node *node); -int remove_node(t_node **head, t_node *node); -t_node *split_node(t_node **node, t_node **alloc, t_node **zone, size_t size); -t_node **find_node_firstfit(t_node **node, size_t size); +t_chunk *get_zone(size_t size); +t_node *find_node_firstfit(t_chunk *chunk, size_t size); +t_node *find_prev_node(t_chunk *zone, t_node *node); +int split_node(t_node *node, size_t size); void show_free_mem(void); void print_node(char fg[7], t_node *node); diff --git a/malloc/run.sh b/malloc/run.sh index 19faa239..2e07e1e0 100755 --- a/malloc/run.sh +++ b/malloc/run.sh @@ -1,5 +1,2 @@ #!/bin/sh -export DYLD_LIBRARY_PATH=. -export DYLD_INSERT_LIBRARIES="libft_malloc.so" -export DYLD_FORCE_FLAT_NAMESPACE=1 -$@ +DYLD_LIBRARY_PATH=. DYLD_INSERT_LIBRARIES="libft_malloc.so" DYLD_FORCE_FLAT_NAMESPACE=1 $@ diff --git a/malloc/srcs/free.c b/malloc/srcs/free.c index 79491db3..e44a0dfc 100644 --- a/malloc/srcs/free.c +++ b/malloc/srcs/free.c @@ -12,49 +12,42 @@ #include "malloc_internal.h" -t_node *tiny_zone; -t_node *small_zone; -t_node *large_zone; -t_node *tiny_alloc; -t_node *small_alloc; -t_node *large_alloc; - -int coalesce_nodes(t_node **head) +int coalesce_nodes(t_node *node) { - while (*head) + t_node *next; + + if ((next = node->next) && next->isfree) { - if ((*head)->next == *(void**)head + (*head)->size) - { - (*head)->size += (*head)->next->size; - (*head)->next = (*head)->next->next; - } - else - head = &(*head)->next; + node->size += next->size; + node->next = next->next; } return (0); } void free(void *ptr) { - t_node **zone_ref; - t_node **alloc_ref; + t_chunk *zone; t_node *node; + t_node *prev; - /* ft_putstr(FG_YELLOW"free("); */ - /* ft_putnbr_hex((long)ptr); */ - /* ft_putendl(")"FG_DEFAULT); */ + /* DGSH("free i", (int)ptr); */ + /* DGSH("free ui", (unsigned int)ptr); */ + /* DGSH("free ll", (long long)ptr); */ + DGSH("free ull", (unsigned long long)ptr); if (!ptr) return ; - node = ptr - HEADER_SIZE; - get_zones(&zone_ref, &alloc_ref, node->size); - /* ft_putstr("zone @"); */ - /* *zone_ref ? print_node(BG_MAGENTA, *zone_ref) : ft_putendl(" NULL"); */ - if (remove_node(alloc_ref, node)) + node = ptr - M_NODEHEAD; + DGSN("node->size", node->size); + zone = get_zone(node->size); + DGSH("free", (long)ptr); + if (!(prev = find_prev_node(zone, node))) { - /* error_free_notalloc(ptr); */ + error_free_notalloc(ptr); return ; } - insert_node(zone_ref, node); - coalesce_nodes(zone_ref); - /* ft_putendl(BG_GREEN"SUCCESSFUL FREE"BG_DEFAULT); */ + DGSH("free", (long)ptr); + coalesce_nodes(node); + DGSH("free", (long)ptr); + coalesce_nodes(prev); + DGS("successful free"); } diff --git a/malloc/srcs/get_zones.c b/malloc/srcs/get_zone.c similarity index 68% rename from malloc/srcs/get_zones.c rename to malloc/srcs/get_zone.c index 65ed3eab..f2f9fb6c 100644 --- a/malloc/srcs/get_zones.c +++ b/malloc/srcs/get_zone.c @@ -12,23 +12,17 @@ #include "malloc_internal.h" -t_node *tiny_zone = NULL; -t_node *small_zone = NULL; -t_node *large_zone = NULL; -t_node *tiny_alloc = NULL; -t_node *small_alloc = NULL; -t_node *large_alloc = NULL; - -void get_zones(t_node ***zone_ref, t_node ***alloc_ref, size_t size) +t_chunk *g_zones[M_ZONES_MAX] = { - if (LARGE(size)) - { - *zone_ref = &large_zone; - *alloc_ref = &large_alloc; - } + NULL, + NULL, + NULL, +}; + +t_chunk *get_zone(size_t size) +{ + if (M_ISLARGE(size)) + return (g_zones[M_LARGE]); else - { - *zone_ref = TINY(size) ? &tiny_zone : &small_zone; - *alloc_ref = TINY(size) ? &tiny_alloc : &small_alloc; - } + return (g_zones[M_ISTINY(size) ? M_TINY : M_SMALL]); } diff --git a/malloc/srcs/malloc.c b/malloc/srcs/malloc.c index e6671c57..3e772b4e 100644 --- a/malloc/srcs/malloc.c +++ b/malloc/srcs/malloc.c @@ -12,57 +12,41 @@ #include "malloc_internal.h" -t_node *tiny_zone; -t_node *small_zone; -t_node *large_zone; -t_node *tiny_alloc; -t_node *small_alloc; -t_node *large_alloc; - -void add_chunk(t_node **zone_ref, size_t size) +void add_chunk(t_chunk **chunk, size_t size) { - size_t chunk_size; + int chunk_size; + t_chunk *new; t_node *node; - /* while (*node_ref) */ - /* node_ref = &(*node_ref)->next; */ - if (LARGE(size)) - chunk_size = size + HEADER_SIZE; + if (M_ISLARGE(size)) + chunk_size = M_PAGEALIGN(size); else - chunk_size = TINY(size) ? malloc_N : malloc_M; - if (!(node = mmap(NULL, chunk_size, PROT_READ|PROT_WRITE, - MAP_ANON|MAP_PRIVATE, -1, 0))) + chunk_size = M_ISTINY(size) ? M_TINYCHUNK : M_SMALLCHUNK; + if (!(new = mmap(NULL, chunk_size, PROT_READ|PROT_WRITE, + MAP_ANON|MAP_PRIVATE, -1, 0))) error_mmap(); - node->size = chunk_size; - insert_node(zone_ref, node); - /* ft_putstr("nchunk@"); */ - /* print_node(BG_GREEN, node); */ + new->next = *chunk; + *chunk = new; + node = (t_node*)(*chunk + 1); + node->size = chunk_size - M_CHUNKHEAD; + node->next = 0; + node->isfree = 1; } void *malloc(size_t size) { - t_node **zone_ref; - t_node **alloc_ref; - t_node **node_ref; + t_chunk *zone; t_node *node; + void *ret; - /* ft_putstr(FG_YELLOW"malloc("); */ - /* ft_putnbr(size); */ - /* ft_putendl(")"FG_DEFAULT); */ - - get_zones(&zone_ref, &alloc_ref, size); - while (!*(node_ref = find_node_firstfit(zone_ref, size))) - add_chunk(zone_ref, size); - - /* ft_putstr("found @"); */ - /* print_node(FG_GREEN, *node_ref); */ - - node = split_node(node_ref, alloc_ref, zone_ref, size); - - /* ft_putstr("touser@"); */ - /* print_node(FG_RED, node); */ - /* ft_putstr("passing "FG_RED); */ - /* ft_putnbr_hex((long)node->data); */ - /* ft_putendl(FG_DEFAULT" to user"); */ - return (node->data); + DGSN("malloc", size); + size += M_NODEHEAD; + zone = get_zone(size); + DGSH("zone", (long)zone); + while (!(node = find_node_firstfit(zone, size))) + add_chunk(&zone, size); + split_node(node, size); + ret = (void*)node + M_NODEHEAD; + DGSH("to user", (long)ret); + return (ret); } diff --git a/malloc/srcs/node_lib.c b/malloc/srcs/node_lib.c index 9597114a..02110116 100644 --- a/malloc/srcs/node_lib.c +++ b/malloc/srcs/node_lib.c @@ -12,72 +12,51 @@ #include "malloc_internal.h" -t_node **find_node_firstfit(t_node **node, size_t size) +t_node *find_node_firstfit(t_chunk *chunk, size_t size) { - /* if (*node) */ - /* { */ - /* ft_putstr("startf@"); */ - /* print_node(BG_CYAN, *node); */ - /* } */ - while (*node && (size_t)(*node)->size < size + HEADER_SIZE) + t_node *node; + + if (!chunk) + return (NULL); + node = (t_node*)(chunk + 1); + while (node && !(node->isfree && node->size >= size)) { - node = &(*node)->next; - /* ft_putstr("firstf@"); */ - /* print_node(FG_GREEN, *node); */ + node = node->next; } return (node); } -t_node *split_node(t_node **node, t_node **alloc, t_node **zone, size_t size) +int split_node(t_node *node, size_t size) { - t_node *new_alloc; - int free_size; + t_node *new_node; - free_size = (*node)->size; - new_alloc = *node; - /* ft_putstr("node->data @ ["); */ - /* ft_putaddr((*node)->data); */ - /* ft_putendl("]"); */ - *node = (t_node*)((*node)->data + size); - /* ft_putstr("node @ ["); */ - /* ft_putaddr(*node); */ - /* ft_putendl("]"); */ - (*node)->size = free_size - (size + HEADER_SIZE); - if ((*node)->size == 0) - remove_node(zone, *node); - new_alloc->size = size; - insert_node(alloc, new_alloc); - return (new_alloc); + new_node = (void*)node + size; + new_node->next = node->next; + new_node->size = node->next - new_node; + new_node->isfree = 1; + node->next = new_node; + node->size -= new_node->size; + node->isfree = 0; + return (0); } - -int remove_node(t_node **head, t_node *node) +t_node *find_prev_node(t_chunk *zone, t_node *node) { - while (*head) + t_node *n; + t_node *prev; + + while (zone) { - /* ft_putstr("looking for node -> ["); */ - /* ft_putnbr_hex((long)node); */ - /* ft_putstr(","); */ - /* ft_putnbr_hex((long)*head); */ - /* ft_putendl("]"); */ - if (*head == node) + n = (t_node*)(zone + 1); + prev = n; + while (n) { - *head = (*head)->next; - return (0); + if (n == node) + return (prev); + prev = n; + n = n->next; } - head = &(*head)->next; + zone = zone->next; } - return (1); -} - -void insert_node(t_node **head, t_node *new) -{ - while (*head) - { - if (new < *head) - break ; - head = &(*head)->next; - } - new->next = *head; - *head = new; + return (NULL); } diff --git a/malloc/srcs/show_alloc_mem.c b/malloc/srcs/show_alloc_mem.c index 29bc3643..517400e8 100644 --- a/malloc/srcs/show_alloc_mem.c +++ b/malloc/srcs/show_alloc_mem.c @@ -23,9 +23,9 @@ void print_node(char color[7], t_node *node) { ft_putstr("\t"); ft_putstr(color); - ft_putnbr_hex((long)node->data); + /* ft_putnbr_hex((long)node->data); */ ft_putstr(" - "); - ft_putnbr_hex((long)node->data + node->size); + /* ft_putnbr_hex((long)node->data + node->size); */ ft_putstr(FBG_DEFAULT" : "); ft_putnbr(node->size); ft_putendl(" bytes"); diff --git a/malloc/tests/test0.c b/malloc/tests/test0.c index e1874458..af8a0efe 100644 --- a/malloc/tests/test0.c +++ b/malloc/tests/test0.c @@ -6,7 +6,6 @@ int main(void) char *addr; i = 0; - valloc(42); while (i < 1024) { i++; From ed31e25ad150fe25af9b69d4f95eabaf3f067805 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 2 Apr 2017 14:57:34 +0200 Subject: [PATCH 17/27] lib file removed --- malloc/libft_malloc.so | 1 - 1 file changed, 1 deletion(-) delete mode 120000 malloc/libft_malloc.so diff --git a/malloc/libft_malloc.so b/malloc/libft_malloc.so deleted file mode 120000 index d6d22878..00000000 --- a/malloc/libft_malloc.so +++ /dev/null @@ -1 +0,0 @@ -libft_malloc_x86_64_Darwin.so \ No newline at end of file From a24acfd0a1935d0e2fc36e1c8113eacfd407e853 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sat, 30 Sep 2017 13:24:43 +0200 Subject: [PATCH 18/27] minor stuff --- malloc/Makefile | 4 +++- malloc/libft | 2 +- malloc/run.sh | 9 +++++++-- malloc/srcs/error_lib.c | 4 ++-- malloc/tests/test3.5.c | 6 ++++-- malloc/tests/test3.c | 7 +++++-- malloc/tests/test4.c | 2 ++ 7 files changed, 24 insertions(+), 10 deletions(-) diff --git a/malloc/Makefile b/malloc/Makefile index 71ce5fc7..fdf8fae6 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -18,7 +18,7 @@ NAME_BIS = libft_malloc.so NAME = libft_malloc_$(HOSTTYPE).so CC = gcc -FLAGS = -Wall -Wextra -Werror #-fsanitize=address +FLAGS = -Wall -Wextra -Werror -fPIC #-fsanitize=address MAIN_FLAGS = -shared OBJ_FLAGS = @@ -49,6 +49,8 @@ OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) NB = $(words $(SRC_BASE)) INDEX = 0 +SHELL := /bin/bash + all : @make -C $(LIBFT_DIR) @make -j $(NAME) diff --git a/malloc/libft b/malloc/libft index 3cfcbb41..8c0961c5 160000 --- a/malloc/libft +++ b/malloc/libft @@ -1 +1 @@ -Subproject commit 3cfcbb41103be5a16a8666b317ee397e9886fa4f +Subproject commit 8c0961c50468d42c3527c208d7f4ae3c98646882 diff --git a/malloc/run.sh b/malloc/run.sh index 2e07e1e0..4274f21d 100755 --- a/malloc/run.sh +++ b/malloc/run.sh @@ -1,2 +1,7 @@ -#!/bin/sh -DYLD_LIBRARY_PATH=. DYLD_INSERT_LIBRARIES="libft_malloc.so" DYLD_FORCE_FLAT_NAMESPACE=1 $@ +#!/bin/bash +if [[ `uname` == 'Darwin' ]]; then + DYLD_LIBRARY_PATH=. DYLD_INSERT_LIBRARIES="libft_malloc.so" DYLD_FORCE_FLAT_NAMESPACE=1 $@ +else + echo $PWD + LD_LIBRARY_PATH=$PWD/. $@ +fi diff --git a/malloc/srcs/error_lib.c b/malloc/srcs/error_lib.c index adcacf30..b572e94c 100644 --- a/malloc/srcs/error_lib.c +++ b/malloc/srcs/error_lib.c @@ -16,7 +16,7 @@ void error_free_notalloc(void *ptr) { int fd; - fd = 1; + fd = 2; ft_putstr_fd(FG_RED"(", fd); ft_putnbr_fd(getpid(), fd); ft_putstr_fd(", ??? ", fd); @@ -31,7 +31,7 @@ void error_mmap(void) { int fd; - fd = 1; + fd = 2; ft_putstr_fd(FG_RED"(", fd); ft_putnbr_fd(getpid(), fd); ft_putstr_fd(", ??? ", fd); diff --git a/malloc/tests/test3.5.c b/malloc/tests/test3.5.c index 302b3945..c2c16583 100644 --- a/malloc/tests/test3.5.c +++ b/malloc/tests/test3.5.c @@ -1,4 +1,6 @@ #include "../includes/malloc.h" +#include +#include #define M (1024 * 1024) @@ -17,8 +19,8 @@ int main(void) strcpy(addr1, "Bonjours\n"); print(addr1); addr2 = (char*)malloc(16*M); - addr3 = (char*)realloc(addr, 128*M); + addr3 = (char*)realloc(addr1, 128*M); addr3[127*M] = 42; - printf(addr3); + print(addr3); return (0); } diff --git a/malloc/tests/test3.c b/malloc/tests/test3.c index 93f1cc1d..8381fa06 100644 --- a/malloc/tests/test3.c +++ b/malloc/tests/test3.c @@ -1,4 +1,7 @@ #include "../includes/malloc.h" +#include +#include +#include #define M (1024 * 1024) @@ -15,8 +18,8 @@ int main(void) addr1 = (char*)malloc(16*M); strcpy(addr1, "Bonjours\n"); print(addr1); - addr3 = (char*)realloc(addr, 128*M); + addr3 = (char*)realloc(addr1, 128*M); addr3[127*M] = 42; - printf(addr3); + print(addr3); return (0); } diff --git a/malloc/tests/test4.c b/malloc/tests/test4.c index f150e7a6..9bb9f3d1 100644 --- a/malloc/tests/test4.c +++ b/malloc/tests/test4.c @@ -1,4 +1,6 @@ #include "../includes/malloc.h" +#include +#include void print(char *s) { From ac5300023b62ac966e6f063044a315e455f90218 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sat, 7 Oct 2017 17:10:59 +0200 Subject: [PATCH 19/27] norme ok, still need to fix without ft_ --- malloc/Makefile | 32 ++------ malloc/includes/malloc.h | 18 +++-- malloc/includes/malloc_internal.h | 96 +++++++++++++++++++----- malloc/libft | 1 - malloc/run.sh | 7 +- malloc/srcs/error_lib.c | 4 +- malloc/srcs/free.c | 50 +++++++----- malloc/srcs/{get_zone.c => ft_putchar.c} | 25 +++--- malloc/srcs/ft_putnbr.c | 44 +++++++++++ malloc/srcs/ft_putstr.c | 49 ++++++++++++ malloc/srcs/hexdump.c | 53 +++++++++++++ malloc/srcs/malloc.c | 58 ++++++++++---- malloc/srcs/node_lib.c | 26 ++++--- malloc/srcs/realloc.c | 10 +-- malloc/srcs/show_alloc_mem.c | 69 +++++++++-------- malloc/tests/test1.c | 3 +- malloc/tests/test2.c | 4 +- malloc/tests/test3.5.c | 6 +- malloc/tests/test3.c | 4 +- malloc/tests/test4.c | 8 +- malloc/tests/test5.c | 10 +-- 21 files changed, 407 insertions(+), 170 deletions(-) delete mode 160000 malloc/libft rename malloc/srcs/{get_zone.c => ft_putchar.c} (65%) create mode 100644 malloc/srcs/ft_putnbr.c create mode 100644 malloc/srcs/ft_putstr.c create mode 100644 malloc/srcs/hexdump.c diff --git a/malloc/Makefile b/malloc/Makefile index fdf8fae6..0ab56846 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -6,7 +6,7 @@ # By: wescande +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2016/08/29 21:32:58 by wescande #+# #+# # -# Updated: 2017/03/31 18:08:35 by jhalford ### ########.fr # +# Updated: 2017/10/07 13:15:40 by jhalford ### ########.fr # # # # **************************************************************************** # @@ -25,12 +25,6 @@ OBJ_FLAGS = LEN_NAME = `printf "%s" $(NAME) |wc -c` DELTA = $$(echo "$$(tput cols)-31-$(LEN_NAME)"|bc) -LIBFT_DIR = libft/ -LIBFT_LIB = $(LIBFT_DIR)libft.a -LIBFT_INC = $(LIBFT_DIR)includes/ - -LIBS = - SRC_DIR = srcs/ INC_DIR = includes/ OBJ_DIR = objs/ @@ -38,7 +32,11 @@ OBJ_DIR = objs/ SRC_BASE = \ error_lib.c\ free.c\ +ft_putchar.c\ +ft_putnbr.c\ +ft_putstr.c\ get_zone.c\ +hexdump.c\ malloc.c\ node_lib.c\ realloc.c\ @@ -52,15 +50,13 @@ INDEX = 0 SHELL := /bin/bash all : - @make -C $(LIBFT_DIR) @make -j $(NAME) @make $(NAME_BIS) -$(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) +$(NAME): $(OBJ_DIR) $(OBJS) @$(CC) $(OBJS) -o $(NAME) \ -I $(INC_DIR) \ - -I $(LIBFT_INC) \ - $(LIBS) $(LIBFT_LIB) $(MAIN_FLAGS) $(FLAGS) + $(LIBS) $(MAIN_FLAGS) $(FLAGS) @printf "\r\033[38;5;117m✓ MAKE $(NAME)\033[0m\033[K\n" $(NAME_BIS): $(NAME) @@ -71,9 +67,6 @@ $(NAME_BIS): $(NAME) @ln -s $(NAME) $(NAME_BIS) @printf "\r\033[38;5;117m✓ LINK $(NAME_BIS)\033[0m\033[K\n" -$(LIBFT_LIB): - @make -C $(LIBFT_DIR) - $(OBJ_DIR) : @mkdir -p $(OBJ_DIR) @mkdir -p $(dir $(OBJS)) @@ -85,8 +78,7 @@ $(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) @$(eval COLOR=$(shell list=(160 196 202 208 215 221 226 227 190 154 118 82 46); index=$$(($(PERCENT) * $${#list[@]} / 100)); echo "$${list[$$index]}")) @printf "\r\033[38;5;%dm⌛ [%s]: %2d%% `printf '█%.0s' {0..$(DONE)}`%*s❙%*.*s\033[0m\033[K" $(COLOR) $(NAME) $(PERCENT) $(TO_DO) "" $(DELTA) $(DELTA) "$(shell echo "$@" | sed 's/^.*\///')" @$(CC) $(FLAGS) $(OBJ_FLAG) -MMD -c $< -o $@\ - -I $(INC_DIR)\ - -I $(LIBFT_INC) + -I $(INC_DIR) @$(eval INDEX=$(shell echo $$(($(INDEX)+1)))) clean: cleanlib @@ -96,9 +88,6 @@ clean: cleanlib printf "\r\033[38;5;202m✗ clean $(NAME).\033[0m\033[K\n"; \ fi; -cleanlib: - @make -C $(LIBFT_DIR) clean - fclean: clean fcleanlib @if [ -e $(NAME) ]; \ then \ @@ -112,13 +101,8 @@ fclean: clean fcleanlib fi; @$(foreach n, $(shell echo libft_malloc_*.so), if [ -f $n ]; then rm -rf $n; printf "\r\033[38;5;196m✗ delete old lib $n.\033[0m\033[K\n"; fi;) -fcleanlib: cleanlib - @make -C $(LIBFT_DIR) fclean - re: fclean all -relib: fcleanlib $(LIBFT_LIB) - .PHONY : fclean clean re relib cleanlib fcleanlib -include $(OBJS:.o=.d) diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index f9ac2f05..18b91873 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -6,24 +6,26 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:06 by jhalford #+# #+# */ -/* Updated: 2017/03/06 17:43:23 by jhalford ### ########.fr */ +/* Updated: 2017/10/07 16:25:06 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ -#ifndef MALLOC_H -# define MALLOC_H +#ifndef FT_MALLOC_H +# define FT_MALLOC_H #include "stdlib.h" # pragma GCC visibility push(default) -void *calloc(size_t count, size_t size); -void free(void *ptr); -void *malloc(size_t size); -/* void *realloc(void *ptr, size_t size); */ +void ft_free(void *ptr); +void *ft_malloc(size_t size); +void *ft_realloc(void *ptr, size_t size); +void show_alloc_mem(void); +void dump_alloc_mem(void); + +/* void *calloc(size_t count, size_t size); */ /* void *reallocf(void *ptr, size_t size); */ /* void *valloc(size_t size); */ -void show_alloc_mem(void); # pragma GCC visibility pop diff --git a/malloc/includes/malloc_internal.h b/malloc/includes/malloc_internal.h index 63fb3fd7..15e6a775 100644 --- a/malloc/includes/malloc_internal.h +++ b/malloc/includes/malloc_internal.h @@ -6,37 +6,78 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:24 by jhalford #+# #+# */ -/* Updated: 2017/03/01 12:03:35 by jhalford ### ########.fr */ +/* Updated: 2017/10/07 17:08:37 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef MALLOC_INTERNAL_H # define MALLOC_INTERNAL_H -# define M_NTINY (64) -# define M_NSMALL (1024) -# define M_PAGEALIGN(x) ((x / getpagesize() + 1) * getpagesize()) +# define M_NTINY ((size_t)64) +# define M_NSMALL ((size_t)1024) +# define M_PAGEALIGN(x) ((x / getpagesize() + 1) * getpagesize()) * 10 # define M_TINYCHUNK (M_PAGEALIGN(101 * M_NTINY)) # define M_SMALLCHUNK (M_PAGEALIGN(101 * M_NSMALL)) -# define M_MAGIC 1234567 -# define M_CHUNKHEAD (sizeof(t_chunk) - alignof(t_chunk)) -# define M_NODEHEAD (sizeof(t_node) - alignof(t_node)) +# define M_CHUNKHEAD (sizeof(t_chunk)) +# define M_NODEHEAD (sizeof(t_node)) # define M_ISTINY(x) (x < (M_NTINY + 1)) -# define M_ISSMALL(x) (!M_TINY(x) && !M_LARGE(x)) -# define M_ISLARGE(x) (M_SMALL < x) +# define M_ISSMALL(x) (!M_ISTINY(x) && !M_ISLARGE(x)) +# define M_ISLARGE(x) (M_NSMALL < x) + +# define NEXT(node) (node->islast ? NULL : (void*)node + node->size) + +# define FT_ABS(x) (((x) < 0) ? -(x) : x) + +/* + * DEBUG without malloc + */ + +# define DP_N(n) ft_putnbr_fd(n, 2) +# define DP_H(n) ft_putnbr_hex_fd(n, 2) +# define DP_C(n) ft_putchar_fd(n, 2) +# define DP_S(n) ft_putstr_fd(n, 2) + +# define DGPID DP_S("===");DP_N(getpid());DP_S("==="); +# define DGW(d) DGPID;d;DP_C('\n') + +# define DGS(s) do { DGW(DP_S(" "s)); } while(0) +# define DGSN(s, n) do { DGW(DP_S(" "s"=");DP_N(n)); } while(0) +# define DGSH(s, n) do { DGW(DP_S(" "s"=");DP_H(n)); } while(0) + +# define FG_DEFAULT "\e[0m" +# define ON_BOLD "\e[1m" +# define ON_UNDERLINED "\e[4m" +# define ON_INVERTED "\e[7m" +# define FG_BLACK "\e[30m" +# define FG_RED "\e[31m" +# define FG_GREEN "\e[32m" +# define FG_YELLOW "\e[33m" +# define FG_BLUE "\e[34m" +# define FG_MAGENTA "\e[35m" +# define FG_CYAN "\e[36m" +# define BG_BLACK "\e[40m" +# define BG_RED "\e[41m" +# define BG_GREEN "\e[42m" +# define BG_YELLOW "\e[43m" +# define BG_BLUE "\e[44m" +# define BG_MAGENTA "\e[45m" +# define BG_CYAN "\e[46m" +# define BG_DEFAULT "\e[49m" + +# define FBG_DEFAULT FG_DEFAULT BG_DEFAULT -#include "libft.h" #include #include +#include typedef struct s_chunk { struct s_chunk *next; } t_chunk; typedef struct s_node { - struct s_node *next; size_t size; - int isfree:1; + unsigned int isfree:1; + unsigned int islast:1; } t_node; enum e_zones { @@ -47,17 +88,38 @@ enum e_zones { }; extern t_chunk *g_zones[M_ZONES_MAX]; +extern volatile int g_malloc_debug; +/* + * malloc_debug levels: + * 1: show chunks after malloc() and free() + * 2: show chunks before malloc() and free(), notify when coalescing. + * 3: show mmap() returns + */ #include "malloc.h" -t_chunk *get_zone(size_t size); +int ret_free(void *ptr); +t_chunk **get_zone(size_t size); t_node *find_node_firstfit(t_chunk *chunk, size_t size); t_node *find_prev_node(t_chunk *zone, t_node *node); int split_node(t_node *node, size_t size); -void show_free_mem(void); -void print_node(char fg[7], t_node *node); +void *hexdump(void *addr, unsigned int offset, unsigned int size); +void print_node(char fg[7], t_node *node); + +void error_mmap(void); +void error_free_notalloc(void *ptr); + +int ft_putchar(char c); +int ft_putchar_fd(char c, int fd); +int ft_putendl(char const *s); +int ft_putendl_fd(char const *s, int fd); +int ft_putstr(char const *s); +int ft_putstr_fd(char const *s, int fd); + +int ft_putnbr(long n); +int ft_putnbr_fd(long n, int fd); +int ft_putnbr_hex(long n); +int ft_putnbr_hex_fd(long n, int fd); -void error_mmap(void); -void error_free_notalloc(void *ptr); #endif diff --git a/malloc/libft b/malloc/libft deleted file mode 160000 index 8c0961c5..00000000 --- a/malloc/libft +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8c0961c50468d42c3527c208d7f4ae3c98646882 diff --git a/malloc/run.sh b/malloc/run.sh index 4274f21d..54d246dd 100755 --- a/malloc/run.sh +++ b/malloc/run.sh @@ -1,7 +1,2 @@ #!/bin/bash -if [[ `uname` == 'Darwin' ]]; then - DYLD_LIBRARY_PATH=. DYLD_INSERT_LIBRARIES="libft_malloc.so" DYLD_FORCE_FLAT_NAMESPACE=1 $@ -else - echo $PWD - LD_LIBRARY_PATH=$PWD/. $@ -fi +DYLD_LIBRARY_PATH=. DYLD_INSERT_LIBRARIES="libft_malloc.so" DYLD_FORCE_FLAT_NAMESPACE=1 $@ diff --git a/malloc/srcs/error_lib.c b/malloc/srcs/error_lib.c index b572e94c..2fbe160f 100644 --- a/malloc/srcs/error_lib.c +++ b/malloc/srcs/error_lib.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/18 19:34:23 by jhalford #+# #+# */ -/* Updated: 2017/02/18 20:08:32 by jhalford ### ########.fr */ +/* Updated: 2017/10/07 17:06:51 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,7 +24,6 @@ void error_free_notalloc(void *ptr) ft_putstr_fd(" malloc: error for object ", fd); ft_putnbr_hex_fd((long)ptr, fd); ft_putendl_fd(": pointer being freed was not allocated"FG_DEFAULT, fd); - /* exit(134); */ } void error_mmap(void) @@ -37,5 +36,4 @@ void error_mmap(void) ft_putstr_fd(", ??? ", fd); ft_putstr_fd(")", fd); ft_putendl_fd(" malloc: mmap failed", fd); - /* exit(134); */ } diff --git a/malloc/srcs/free.c b/malloc/srcs/free.c index e44a0dfc..e08e38ce 100644 --- a/malloc/srcs/free.c +++ b/malloc/srcs/free.c @@ -6,48 +6,62 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ -/* Updated: 2017/03/01 12:04:36 by jhalford ### ########.fr */ +/* Updated: 2017/10/07 16:29:44 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" +volatile int g_malloc_debug; + int coalesce_nodes(t_node *node) { t_node *next; - if ((next = node->next) && next->isfree) + show_alloc_mem(); + if (node->islast) + return (0); + next = (void*)node + node->size; + if (node->isfree && next->isfree) { + if (g_malloc_debug >= 2) + { + DGSH("coalescing 2 nodes at addr", (long)node); + DGSH("and addr", (long)next); + } + node->islast = next->islast; node->size += next->size; - node->next = next->next; } return (0); } -void free(void *ptr) +int ret_free(void *ptr) { t_chunk *zone; t_node *node; t_node *prev; - /* DGSH("free i", (int)ptr); */ - /* DGSH("free ui", (unsigned int)ptr); */ - /* DGSH("free ll", (long long)ptr); */ - DGSH("free ull", (unsigned long long)ptr); if (!ptr) - return ; + return (2); node = ptr - M_NODEHEAD; - DGSN("node->size", node->size); - zone = get_zone(node->size); - DGSH("free", (long)ptr); + zone = *get_zone(node->size); if (!(prev = find_prev_node(zone, node))) { - error_free_notalloc(ptr); - return ; + return (1); } - DGSH("free", (long)ptr); - coalesce_nodes(node); - DGSH("free", (long)ptr); + node->isfree = 1; coalesce_nodes(prev); - DGS("successful free"); + return (0); +} + +void ft_free(void *ptr) +{ + if (g_malloc_debug >= 1) + DGSH("free called with addr", (long)ptr); + if (g_malloc_debug >= 2) + show_alloc_mem(); + if (ret_free(ptr) == 1) + error_free_notalloc(ptr); + if (g_malloc_debug >= 1) + show_alloc_mem(); } diff --git a/malloc/srcs/get_zone.c b/malloc/srcs/ft_putchar.c similarity index 65% rename from malloc/srcs/get_zone.c rename to malloc/srcs/ft_putchar.c index f2f9fb6c..e8b0e545 100644 --- a/malloc/srcs/get_zone.c +++ b/malloc/srcs/ft_putchar.c @@ -1,28 +1,23 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* get_zones.c :+: :+: :+: */ +/* ft_putchar.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2017/02/18 17:53:41 by jhalford #+# #+# */ -/* Updated: 2017/02/18 20:06:53 by jhalford ### ########.fr */ +/* Created: 2017/10/07 17:07:04 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:07:06 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" -t_chunk *g_zones[M_ZONES_MAX] = +int ft_putchar_fd(char c, int fd) { - NULL, - NULL, - NULL, -}; - -t_chunk *get_zone(size_t size) -{ - if (M_ISLARGE(size)) - return (g_zones[M_LARGE]); - else - return (g_zones[M_ISTINY(size) ? M_TINY : M_SMALL]); + return (write(fd, &c, 1)); +} + +int ft_putchar(char c) +{ + return (write(1, &c, 1)); } diff --git a/malloc/srcs/ft_putnbr.c b/malloc/srcs/ft_putnbr.c new file mode 100644 index 00000000..c8028fc6 --- /dev/null +++ b/malloc/srcs/ft_putnbr.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:07:00 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:08:25 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +int ft_putnbr_loop(long n, int base, int fd) +{ + if (n >= base) + ft_putnbr_loop(n / base, base, fd); + return (ft_putchar_fd("0123456789abcdef"[n % base], fd)); +} + +int ft_putnbr_hex_fd(long n, int fd) +{ + ft_putstr_fd("0x", fd); + return (ft_putnbr_loop(n, 16, fd)); +} + +int ft_putnbr_fd(long n, int fd) +{ + if (n < 0) + ft_putchar_fd('-', fd); + n = FT_ABS(n); + return (ft_putnbr_loop(n, 10, fd)); +} + +int ft_putnbr_hex(long n) +{ + return (ft_putnbr_hex_fd(n, 1)); +} + +int ft_putnbr(long n) +{ + return (ft_putnbr_fd(n, 1)); +} diff --git a/malloc/srcs/ft_putstr.c b/malloc/srcs/ft_putstr.c new file mode 100644 index 00000000..58acc346 --- /dev/null +++ b/malloc/srcs/ft_putstr.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:07:41 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:08:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +size_t ft_strlen(const char *s) +{ + int i; + + i = 0; + if (!s) + return (0); + while (s[i]) + i++; + return (i); +} + +int ft_putendl_fd(char const *s, int fd) +{ + char nl; + + nl = '\n'; + write(fd, s, ft_strlen(s)); + return (write(fd, &nl, 1)); +} + +int ft_putendl(char const *s) +{ + return (ft_putendl_fd(s, 1)); +} + +int ft_putstr_fd(char const *s, int fd) +{ + return (write(fd, s, ft_strlen(s))); +} + +int ft_putstr(char const *s) +{ + return (write(1, s, ft_strlen(s))); +} diff --git a/malloc/srcs/hexdump.c b/malloc/srcs/hexdump.c new file mode 100644 index 00000000..60580a61 --- /dev/null +++ b/malloc/srcs/hexdump.c @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* hexdump.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 15:44:13 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:09:29 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +int ft_dumpnbr_hex(char n) +{ + if (n < 0xa) + ft_putchar('0'); + return (ft_putnbr_loop(n, 16, 1)); +} + +static void print_hex_contents(void *addr, unsigned int size) +{ + void *a; + + a = addr; + while (a - addr < 16) + { + if ((a - addr) >= size) + break ; + else + ft_dumpnbr_hex(*(unsigned char*)a); + ft_putchar(' '); + a++; + } +} + +void *hexdump(void *addr, unsigned int offset, unsigned int size) +{ + void *a; + + addr += offset; + a = addr; + if (addr == NULL) + return (addr); + while ((a - addr) < size) + { + print_hex_contents(a, (size - (a - addr))); + ft_putchar('\n'); + a += 16; + } + return (addr); +} diff --git a/malloc/srcs/malloc.c b/malloc/srcs/malloc.c index 3e772b4e..d1761251 100644 --- a/malloc/srcs/malloc.c +++ b/malloc/srcs/malloc.c @@ -6,13 +6,32 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/03/01 12:15:24 by jhalford ### ########.fr */ +/* Updated: 2017/10/07 17:10:38 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" -void add_chunk(t_chunk **chunk, size_t size) +t_chunk *g_zones[M_ZONES_MAX] = +{ + NULL, + NULL, + NULL, +}; + +volatile int g_malloc_debug = 0; + +t_chunk **get_zone(size_t size) +{ + if (M_ISLARGE(size)) + return (&g_zones[M_LARGE]); + else if (M_ISSMALL(size)) + return (&g_zones[M_SMALL]); + else + return (&g_zones[M_TINY]); +} + +void add_chunk(t_chunk **chunk, size_t size) { int chunk_size; t_chunk *new; @@ -22,31 +41,44 @@ void add_chunk(t_chunk **chunk, size_t size) chunk_size = M_PAGEALIGN(size); else chunk_size = M_ISTINY(size) ? M_TINYCHUNK : M_SMALLCHUNK; - if (!(new = mmap(NULL, chunk_size, PROT_READ|PROT_WRITE, - MAP_ANON|MAP_PRIVATE, -1, 0))) + chunk_size += M_CHUNKHEAD; + if (!(new = mmap(NULL, chunk_size, PROT_READ | PROT_WRITE, + MAP_ANON | MAP_PRIVATE, -1, 0))) error_mmap(); + if (g_malloc_debug >= 3) + DGSN("malloc_debug", g_malloc_debug); new->next = *chunk; *chunk = new; node = (t_node*)(*chunk + 1); node->size = chunk_size - M_CHUNKHEAD; - node->next = 0; node->isfree = 1; + node->islast = 1; } -void *malloc(size_t size) +void *ft_malloc(size_t size) { - t_chunk *zone; + t_chunk **zone; t_node *node; void *ret; - DGSN("malloc", size); + g_malloc_debug = 1; + if (g_malloc_debug >= 1) + DGSN("malloc called with size", size); + if (g_malloc_debug >= 2) + { + DGSN("malloc", size); + show_alloc_mem(); + } size += M_NODEHEAD; zone = get_zone(size); - DGSH("zone", (long)zone); - while (!(node = find_node_firstfit(zone, size))) - add_chunk(&zone, size); + while (!(node = find_node_firstfit(*zone, size))) + add_chunk(zone, size); split_node(node, size); - ret = (void*)node + M_NODEHEAD; - DGSH("to user", (long)ret); + ret = (void*)(node + 1); + if (g_malloc_debug >= 1) + { + DGSH("user got ptr", (long)ret); + show_alloc_mem(); + } return (ret); } diff --git a/malloc/srcs/node_lib.c b/malloc/srcs/node_lib.c index 02110116..5ebc7966 100644 --- a/malloc/srcs/node_lib.c +++ b/malloc/srcs/node_lib.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:15 by jhalford #+# #+# */ -/* Updated: 2017/03/01 12:04:08 by jhalford ### ########.fr */ +/* Updated: 2017/10/07 17:09:11 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,9 +19,11 @@ t_node *find_node_firstfit(t_chunk *chunk, size_t size) if (!chunk) return (NULL); node = (t_node*)(chunk + 1); - while (node && !(node->isfree && node->size >= size)) + while (node) { - node = node->next; + if (node->isfree && node->size >= size) + break ; + node = NEXT(node); } return (node); } @@ -30,13 +32,15 @@ int split_node(t_node *node, size_t size) { t_node *new_node; - new_node = (void*)node + size; - new_node->next = node->next; - new_node->size = node->next - new_node; - new_node->isfree = 1; - node->next = new_node; - node->size -= new_node->size; node->isfree = 0; + if (node->size - size <= M_NODEHEAD) + return (0); + new_node = (void*)node + size; + new_node->size = node->size - size; + new_node->isfree = 1; + new_node->islast = node->islast; + node->islast = 0; + node->size = size; return (0); } @@ -51,10 +55,10 @@ t_node *find_prev_node(t_chunk *zone, t_node *node) prev = n; while (n) { - if (n == node) + if (n == node) return (prev); prev = n; - n = n->next; + n = NEXT(n); } zone = zone->next; } diff --git a/malloc/srcs/realloc.c b/malloc/srcs/realloc.c index dedb3e5b..dd4739fb 100644 --- a/malloc/srcs/realloc.c +++ b/malloc/srcs/realloc.c @@ -6,15 +6,15 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/18 13:23:20 by jhalford #+# #+# */ -/* Updated: 2017/03/01 12:15:31 by jhalford ### ########.fr */ +/* Updated: 2017/10/07 17:08:46 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" -void *realloc(void *ptr, size_t size) +void *ft_realloc(void *ptr, size_t size) { - ft_putendl("realloc called"); - free(ptr); - return (malloc(size)); + if (ret_free(ptr)) + return (NULL); + return (ft_malloc(size)); } diff --git a/malloc/srcs/show_alloc_mem.c b/malloc/srcs/show_alloc_mem.c index 517400e8..c068a1dd 100644 --- a/malloc/srcs/show_alloc_mem.c +++ b/malloc/srcs/show_alloc_mem.c @@ -6,60 +6,65 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:20 by jhalford #+# #+# */ -/* Updated: 2017/02/21 16:37:55 by jhalford ### ########.fr */ +/* Updated: 2017/10/07 17:06:14 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" -t_node *tiny_zone; -t_node *small_zone; -t_node *large_zone; -t_node *tiny_alloc; -t_node *small_alloc; -t_node *large_alloc; +t_chunk *g_zones[M_ZONES_MAX]; void print_node(char color[7], t_node *node) { ft_putstr("\t"); ft_putstr(color); - /* ft_putnbr_hex((long)node->data); */ + ft_putnbr_hex((long)(node)); ft_putstr(" - "); - /* ft_putnbr_hex((long)node->data + node->size); */ + ft_putnbr_hex((long)(node + 1)); + ft_putstr(" - "); + ft_putnbr_hex((long)((void*)node + node->size)); ft_putstr(FBG_DEFAULT" : "); ft_putnbr(node->size); - ft_putendl(" bytes"); + ft_putstr(" bytes"); + ft_putchar('\n'); } -void show_alloc_zone(char *name, t_node *alloc, t_node *zone, size_t (*total)[3]) +void show_chunk(char *name, t_chunk *chunk, int dump) { - if (alloc || zone) - ft_putstr(name); - while (alloc) + t_node *node; + + ft_putstr(name); + if (!chunk) { - print_node(FG_RED, alloc); - (*total)[1] += alloc->size; - alloc = alloc->next; + ft_putstr("empty"); + ft_putchar('\n'); + return ; } - while (zone) + while (chunk) { - print_node(FG_GREEN, zone); - (*total)[0] += zone->size; - zone = zone->next; + ft_putchar('\n'); + node = (t_node*)(chunk + 1); + while (node) + { + print_node(node->isfree ? FG_GREEN : FG_RED, node); + if (dump && !node->isfree) + hexdump(node, M_NODEHEAD, node->size - M_NODEHEAD); + node = NEXT(node); + } + chunk = chunk->next; } } void show_alloc_mem(void) { - size_t total[3]; - - total[0] = 0; - total[1] = 0; - show_alloc_zone("TINY:", tiny_alloc, tiny_zone, &total); - show_alloc_zone("SMALL:", small_alloc, small_zone, &total); - show_alloc_zone("LARGE:", large_alloc, large_zone, &total); - printf("Total:"); - printf("\t%7zu bytes free\n", total[0]); - printf("\t%7zu bytes allocated\n", total[1]); - printf("\t%7zu bytes mmap'd\n", total[0] + total[1]); + show_chunk("TINY: ", g_zones[M_TINY], 0); + show_chunk("SMALL: ", g_zones[M_SMALL], 0); + show_chunk("LARGE: ", g_zones[M_LARGE], 0); +} + +void dump_alloc_mem(void) +{ + show_chunk("TINY: ", g_zones[M_TINY], 1); + show_chunk("SMALL: ", g_zones[M_SMALL], 1); + show_chunk("LARGE: ", g_zones[M_LARGE], 1); } diff --git a/malloc/tests/test1.c b/malloc/tests/test1.c index acd19226..b2172b62 100644 --- a/malloc/tests/test1.c +++ b/malloc/tests/test1.c @@ -1,5 +1,6 @@ #include "../includes/malloc.h" +void *ft_malloc(size_t size); int main(void) { int i; @@ -8,7 +9,7 @@ int main(void) i = 0; while (i < 1024) { - addr = (char*)malloc(1024); + addr = (char*)ft_malloc(1024); addr[0] = 42; i++; } diff --git a/malloc/tests/test2.c b/malloc/tests/test2.c index c65bdc0e..a9418b84 100644 --- a/malloc/tests/test2.c +++ b/malloc/tests/test2.c @@ -8,9 +8,9 @@ int main(void) i = 0; while (i < 1024) { - addr = (char*)malloc(1024); + addr = (char*)ft_malloc(1024); addr[0] = 42; - free(addr); + ft_free(addr); i++; } return (0); diff --git a/malloc/tests/test3.5.c b/malloc/tests/test3.5.c index c2c16583..8e045aa2 100644 --- a/malloc/tests/test3.5.c +++ b/malloc/tests/test3.5.c @@ -15,11 +15,11 @@ int main(void) char *addr2; char *addr3; - addr1 = (char*)malloc(16*M); + addr1 = (char*)ft_malloc(16*M); strcpy(addr1, "Bonjours\n"); print(addr1); - addr2 = (char*)malloc(16*M); - addr3 = (char*)realloc(addr1, 128*M); + addr2 = (char*)ft_malloc(16*M); + addr3 = (char*)ft_realloc(addr1, 128*M); addr3[127*M] = 42; print(addr3); return (0); diff --git a/malloc/tests/test3.c b/malloc/tests/test3.c index 8381fa06..2100874d 100644 --- a/malloc/tests/test3.c +++ b/malloc/tests/test3.c @@ -15,10 +15,10 @@ int main(void) char *addr1; char *addr3; - addr1 = (char*)malloc(16*M); + addr1 = (char*)ft_malloc(16*M); strcpy(addr1, "Bonjours\n"); print(addr1); - addr3 = (char*)realloc(addr1, 128*M); + addr3 = (char*)ft_realloc(addr1, 128*M); addr3[127*M] = 42; print(addr3); return (0); diff --git a/malloc/tests/test4.c b/malloc/tests/test4.c index 9bb9f3d1..5b433edf 100644 --- a/malloc/tests/test4.c +++ b/malloc/tests/test4.c @@ -11,10 +11,10 @@ int main(void) { char *addr; - addr = malloc(16); - free(NULL); - free((void*)addr + 5); - if (realloc((void*)addr + 5, 10) == NULL) + addr = ft_malloc(16); + ft_free(NULL); + ft_free((void*)addr + 5); + if (ft_realloc((void*)addr + 5, 10) == NULL) print("Bonjours\n"); return (0); } diff --git a/malloc/tests/test5.c b/malloc/tests/test5.c index e01aadb9..e1a9647d 100644 --- a/malloc/tests/test5.c +++ b/malloc/tests/test5.c @@ -2,11 +2,11 @@ int main(void) { - malloc(1024); - malloc(1024 * 32); - malloc(1024 * 1024); - malloc(1024 * 1024 * 16); - malloc(1024 * 1024 * 128); + ft_malloc(1024); + ft_malloc(1024 * 32); + ft_malloc(1024 * 1024); + ft_malloc(1024 * 1024 * 16); + ft_malloc(1024 * 1024 * 128); show_alloc_mem(); return (0); } From 555844379dc12b9143ade97537e5cc93d84c8a86 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sat, 7 Oct 2017 17:13:41 +0200 Subject: [PATCH 20/27] cleanup --- malloc/update_makefile.sh | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100755 malloc/update_makefile.sh diff --git a/malloc/update_makefile.sh b/malloc/update_makefile.sh deleted file mode 100755 index a1b3228d..00000000 --- a/malloc/update_makefile.sh +++ /dev/null @@ -1,17 +0,0 @@ -MYPATH=$(pwd) -CUR_MAKEFILE=$MYPATH/Makefile -if [ -e $CUR_MAKEFILE ] -then - echo "regenerate Makefile" - sed "`grep -n 'SRC_BASE =' $CUR_MAKEFILE | sed 's/:.*//'`, \$d" $CUR_MAKEFILE > NEWMAKEFILE - grep 'SRC_BASE =' $CUR_MAKEFILE >> NEWMAKEFILE - expr "$(find ./src | grep "\.c" | sed -e 's/src\///' -e 's/\.\///' -e 's/$/\\/')" : "\(.*\).$" >> NEWMAKEFILE - echo "" >> NEWMAKEFILE - grep 'SRCS =' $CUR_MAKEFILE >> NEWMAKEFILE - sed "1, `grep -n 'SRCS =' $CUR_MAKEFILE | sed 's/:.*//'`d" $CUR_MAKEFILE >> NEWMAKEFILE - mv $CUR_MAKEFILE ~/Documents/.OLDMakefile - mv NEWMAKEFILE $CUR_MAKEFILE - echo "Makefile done (copy still alive in ~/Documents/.OLDMakefile)" -else - echo "Makefile not found." -fi From a8fe30763e6e1c17ce47a112d0ef1c17e8a62006 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 8 Oct 2017 18:17:17 +0200 Subject: [PATCH 21/27] it compiles --- malloc/.gitignore | 3 +++ malloc/Makefile | 1 - malloc/includes/malloc_internal.h | 3 ++- malloc/srcs/ft_putnbr.c | 2 +- malloc/srcs/hexdump.c | 2 +- malloc/srcs/malloc.c | 3 +-- 6 files changed, 8 insertions(+), 6 deletions(-) diff --git a/malloc/.gitignore b/malloc/.gitignore index 1b9129a7..16b8625d 100644 --- a/malloc/.gitignore +++ b/malloc/.gitignore @@ -1,3 +1,6 @@ myprogram *.o libft_malloc_*.so +libft_malloc.so +tests/* +!test/*.c diff --git a/malloc/Makefile b/malloc/Makefile index 0ab56846..73bd761a 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -35,7 +35,6 @@ free.c\ ft_putchar.c\ ft_putnbr.c\ ft_putstr.c\ -get_zone.c\ hexdump.c\ malloc.c\ node_lib.c\ diff --git a/malloc/includes/malloc_internal.h b/malloc/includes/malloc_internal.h index 15e6a775..a3805e3e 100644 --- a/malloc/includes/malloc_internal.h +++ b/malloc/includes/malloc_internal.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:24 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:08:37 by jhalford ### ########.fr */ +/* Updated: 2017/10/08 18:16:21 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -121,5 +121,6 @@ int ft_putnbr(long n); int ft_putnbr_fd(long n, int fd); int ft_putnbr_hex(long n); int ft_putnbr_hex_fd(long n, int fd); +int ft_putnbr_loop(long n, int base, int fd); #endif diff --git a/malloc/srcs/ft_putnbr.c b/malloc/srcs/ft_putnbr.c index c8028fc6..eeb243dd 100644 --- a/malloc/srcs/ft_putnbr.c +++ b/malloc/srcs/ft_putnbr.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/07 17:07:00 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:08:25 by jhalford ### ########.fr */ +/* Updated: 2017/10/08 18:15:49 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/hexdump.c b/malloc/srcs/hexdump.c index 60580a61..5316cc84 100644 --- a/malloc/srcs/hexdump.c +++ b/malloc/srcs/hexdump.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/07 15:44:13 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:09:29 by jhalford ### ########.fr */ +/* Updated: 2017/10/08 18:16:02 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/malloc.c b/malloc/srcs/malloc.c index d1761251..777123b7 100644 --- a/malloc/srcs/malloc.c +++ b/malloc/srcs/malloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:10:38 by jhalford ### ########.fr */ +/* Updated: 2017/10/08 17:29:52 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -61,7 +61,6 @@ void *ft_malloc(size_t size) t_node *node; void *ret; - g_malloc_debug = 1; if (g_malloc_debug >= 1) DGSN("malloc called with size", size); if (g_malloc_debug >= 2) From 8e70deabc3f4e1e2cd55e95dea4fc200e2ad254c Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 22 Oct 2017 17:37:56 +0200 Subject: [PATCH 22/27] all good --- malloc/Makefile | 18 +++++-- malloc/do_test.sh | 11 ++++ malloc/includes/malloc.h | 16 +++--- malloc/includes/malloc_internal.h | 83 ++++++++++++++++--------------- malloc/run.sh | 7 ++- malloc/srcs/calloc.c | 27 ++++++++++ malloc/srcs/error_lib.c | 4 +- malloc/srcs/free.c | 31 +++++------- malloc/srcs/ft_memcpy.c | 28 +++++++++++ malloc/srcs/ft_memset.c | 23 +++++++++ malloc/srcs/ft_putstr.c | 2 +- malloc/srcs/interface.c | 56 +++++++++++++++++++++ malloc/srcs/interface_extended.c | 59 ++++++++++++++++++++++ malloc/srcs/malloc.c | 24 +++------ malloc/srcs/node_lib.c | 2 +- malloc/srcs/realloc.c | 15 ++++-- malloc/srcs/reallocf.c | 24 +++++++++ malloc/srcs/show_alloc_mem.c | 16 +----- malloc/srcs/valloc.c | 13 +++++ malloc/tests/test0.c | 2 + malloc/tests/test1.c | 4 +- malloc/tests/test2.c | 4 +- malloc/tests/test3.5.c | 26 ---------- malloc/tests/test3.c | 4 +- malloc/tests/test4.c | 8 +-- malloc/tests/test5.c | 10 ++-- 26 files changed, 362 insertions(+), 155 deletions(-) create mode 100755 malloc/do_test.sh mode change 100755 => 100644 malloc/run.sh create mode 100644 malloc/srcs/calloc.c create mode 100644 malloc/srcs/ft_memcpy.c create mode 100644 malloc/srcs/ft_memset.c create mode 100644 malloc/srcs/interface.c create mode 100644 malloc/srcs/interface_extended.c create mode 100644 malloc/srcs/reallocf.c create mode 100644 malloc/srcs/valloc.c delete mode 100644 malloc/tests/test3.5.c diff --git a/malloc/Makefile b/malloc/Makefile index 73bd761a..2197234c 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -6,7 +6,7 @@ # By: wescande +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2016/08/29 21:32:58 by wescande #+# #+# # -# Updated: 2017/10/07 13:15:40 by jhalford ### ########.fr # +# Updated: 2017/10/22 13:19:38 by jhalford ### ########.fr # # # # **************************************************************************** # @@ -18,8 +18,8 @@ NAME_BIS = libft_malloc.so NAME = libft_malloc_$(HOSTTYPE).so CC = gcc -FLAGS = -Wall -Wextra -Werror -fPIC #-fsanitize=address -MAIN_FLAGS = -shared +FLAGS = -Wall -Wextra -Werror -fvisibility=hidden -fPIC +MAIN_FLAGS = -shared -fPIC OBJ_FLAGS = LEN_NAME = `printf "%s" $(NAME) |wc -c` @@ -30,16 +30,23 @@ INC_DIR = includes/ OBJ_DIR = objs/ SRC_BASE = \ +calloc.c\ error_lib.c\ free.c\ +ft_memcpy.c\ +ft_memset.c\ ft_putchar.c\ ft_putnbr.c\ ft_putstr.c\ hexdump.c\ +interface.c\ +interface_extended.c\ malloc.c\ node_lib.c\ realloc.c\ -show_alloc_mem.c +reallocf.c\ +show_alloc_mem.c\ +valloc.c SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) @@ -56,6 +63,7 @@ $(NAME): $(OBJ_DIR) $(OBJS) @$(CC) $(OBJS) -o $(NAME) \ -I $(INC_DIR) \ $(LIBS) $(MAIN_FLAGS) $(FLAGS) + @strip -x $@ @printf "\r\033[38;5;117m✓ MAKE $(NAME)\033[0m\033[K\n" $(NAME_BIS): $(NAME) @@ -102,6 +110,6 @@ fclean: clean fcleanlib re: fclean all -.PHONY : fclean clean re relib cleanlib fcleanlib +.PHONY : fclean clean re relib cleanlib fcleanlib tests -include $(OBJS:.o=.d) diff --git a/malloc/do_test.sh b/malloc/do_test.sh new file mode 100755 index 00000000..e57343a6 --- /dev/null +++ b/malloc/do_test.sh @@ -0,0 +1,11 @@ +if [ -z $1 ] +then + echo "Need an arg"; + exit; +fi +if [ -z $2 ] +then + make && gcc -w -L. $1 -o .bin -lft_malloc && /usr/bin/time -l ./.bin +else + make && gcc -w -L. $1 -o .bin -lft_malloc && ./tests/run.sh /usr/bin/time -l ./.bin +fi diff --git a/malloc/includes/malloc.h b/malloc/includes/malloc.h index 18b91873..9b12cb46 100644 --- a/malloc/includes/malloc.h +++ b/malloc/includes/malloc.h @@ -6,27 +6,25 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:06 by jhalford #+# #+# */ -/* Updated: 2017/10/07 16:25:06 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 17:36:27 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef FT_MALLOC_H # define FT_MALLOC_H -#include "stdlib.h" +# include "stdlib.h" # pragma GCC visibility push(default) -void ft_free(void *ptr); -void *ft_malloc(size_t size); -void *ft_realloc(void *ptr, size_t size); +void free(void *ptr); +void *malloc(size_t size); +void *realloc(void *ptr, size_t size); +void *reallocf(void *ptr, size_t size); +void *calloc(size_t count, size_t size); void show_alloc_mem(void); void dump_alloc_mem(void); -/* void *calloc(size_t count, size_t size); */ -/* void *reallocf(void *ptr, size_t size); */ -/* void *valloc(size_t size); */ - # pragma GCC visibility pop #endif diff --git a/malloc/includes/malloc_internal.h b/malloc/includes/malloc_internal.h index a3805e3e..17fe3c59 100644 --- a/malloc/includes/malloc_internal.h +++ b/malloc/includes/malloc_internal.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 23:00:24 by jhalford #+# #+# */ -/* Updated: 2017/10/08 18:16:21 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 17:17:13 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,23 +23,16 @@ # define M_ISTINY(x) (x < (M_NTINY + 1)) # define M_ISSMALL(x) (!M_ISTINY(x) && !M_ISLARGE(x)) # define M_ISLARGE(x) (M_NSMALL < x) - # define NEXT(node) (node->islast ? NULL : (void*)node + node->size) # define FT_ABS(x) (((x) < 0) ? -(x) : x) -/* - * DEBUG without malloc - */ - # define DP_N(n) ft_putnbr_fd(n, 2) # define DP_H(n) ft_putnbr_hex_fd(n, 2) # define DP_C(n) ft_putchar_fd(n, 2) # define DP_S(n) ft_putstr_fd(n, 2) - # define DGPID DP_S("===");DP_N(getpid());DP_S("==="); # define DGW(d) DGPID;d;DP_C('\n') - # define DGS(s) do { DGW(DP_S(" "s)); } while(0) # define DGSN(s, n) do { DGW(DP_S(" "s"=");DP_N(n)); } while(0) # define DGSH(s, n) do { DGW(DP_S(" "s"=");DP_H(n)); } while(0) @@ -63,12 +56,13 @@ # define BG_MAGENTA "\e[45m" # define BG_CYAN "\e[46m" # define BG_DEFAULT "\e[49m" - # define FBG_DEFAULT FG_DEFAULT BG_DEFAULT -#include -#include -#include +# include +# include +# include +# include +# include "malloc.h" typedef struct s_chunk { struct s_chunk *next; @@ -87,40 +81,49 @@ enum e_zones { M_ZONES_MAX, }; -extern t_chunk *g_zones[M_ZONES_MAX]; -extern volatile int g_malloc_debug; +extern t_chunk *g_zones[M_ZONES_MAX]; +extern pthread_mutex_t g_mutex; +extern int g_malloc_debug; /* - * malloc_debug levels: - * 1: show chunks after malloc() and free() - * 2: show chunks before malloc() and free(), notify when coalescing. - * 3: show mmap() returns - */ +** malloc_debug levels: +** 1: show malloc/free calls with arguments +** 2: show chunks before and after malloc/free, notify when coalescing. +** 3: show mmap values +*/ -#include "malloc.h" +int ft_free(void *ptr); +void *ft_malloc(size_t size); +void *ft_realloc(void *ptr, size_t size); +void *ft_reallocf(void *ptr, size_t size); +void *ft_calloc(size_t count, size_t size); +int ret_free(void *ptr); -int ret_free(void *ptr); -t_chunk **get_zone(size_t size); -t_node *find_node_firstfit(t_chunk *chunk, size_t size); -t_node *find_prev_node(t_chunk *zone, t_node *node); -int split_node(t_node *node, size_t size); +t_chunk **get_zone(size_t size); +t_node *find_node_firstfit(t_chunk *chunk, size_t size); +t_node *find_prev_node(t_chunk *zone, t_node *node); +int split_node(t_node *node, size_t size); -void *hexdump(void *addr, unsigned int offset, unsigned int size); -void print_node(char fg[7], t_node *node); +void *hexdump(void *addr, unsigned int offset, + unsigned int size); +void show_chunk(char *name, t_chunk *chunk, int dump); -void error_mmap(void); -void error_free_notalloc(void *ptr); +void error_mmap(void); +void error_free_notalloc(void *ptr); -int ft_putchar(char c); -int ft_putchar_fd(char c, int fd); -int ft_putendl(char const *s); -int ft_putendl_fd(char const *s, int fd); -int ft_putstr(char const *s); -int ft_putstr_fd(char const *s, int fd); +int ft_putchar(char c); +int ft_putchar_fd(char c, int fd); +int ft_putendl(char const *s); +int ft_putendl_fd(char const *s, int fd); +int ft_putstr(char const *s); +int ft_putstr_fd(char const *s, int fd); -int ft_putnbr(long n); -int ft_putnbr_fd(long n, int fd); -int ft_putnbr_hex(long n); -int ft_putnbr_hex_fd(long n, int fd); -int ft_putnbr_loop(long n, int base, int fd); +int ft_putnbr(long n); +int ft_putnbr_fd(long n, int fd); +int ft_putnbr_hex(long n); +int ft_putnbr_hex_fd(long n, int fd); +int ft_putnbr_loop(long n, int base, int fd); + +void *ft_memcpy(void *dst, const void *src, size_t n); +void *ft_memset(void *b, int c, size_t len); #endif diff --git a/malloc/run.sh b/malloc/run.sh old mode 100755 new mode 100644 index 54d246dd..19faa239 --- a/malloc/run.sh +++ b/malloc/run.sh @@ -1,2 +1,5 @@ -#!/bin/bash -DYLD_LIBRARY_PATH=. DYLD_INSERT_LIBRARIES="libft_malloc.so" DYLD_FORCE_FLAT_NAMESPACE=1 $@ +#!/bin/sh +export DYLD_LIBRARY_PATH=. +export DYLD_INSERT_LIBRARIES="libft_malloc.so" +export DYLD_FORCE_FLAT_NAMESPACE=1 +$@ diff --git a/malloc/srcs/calloc.c b/malloc/srcs/calloc.c new file mode 100644 index 00000000..164fca5f --- /dev/null +++ b/malloc/srcs/calloc.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/22 14:35:06 by jhalford #+# #+# */ +/* Updated: 2017/10/22 17:30:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +int g_malloc_debug; + +void *ft_calloc(size_t count, size_t size) +{ + void *ptr; + unsigned long big_size; + + big_size = count * size; + if (!(ptr = ft_malloc(big_size))) + return (ptr); + ft_memset(ptr, 0, big_size); + return (ptr); +} diff --git a/malloc/srcs/error_lib.c b/malloc/srcs/error_lib.c index 2fbe160f..6cf825d6 100644 --- a/malloc/srcs/error_lib.c +++ b/malloc/srcs/error_lib.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/18 19:34:23 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:06:51 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 11:29:39 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,7 +19,6 @@ void error_free_notalloc(void *ptr) fd = 2; ft_putstr_fd(FG_RED"(", fd); ft_putnbr_fd(getpid(), fd); - ft_putstr_fd(", ??? ", fd); ft_putstr_fd(")", fd); ft_putstr_fd(" malloc: error for object ", fd); ft_putnbr_hex_fd((long)ptr, fd); @@ -33,7 +32,6 @@ void error_mmap(void) fd = 2; ft_putstr_fd(FG_RED"(", fd); ft_putnbr_fd(getpid(), fd); - ft_putstr_fd(", ??? ", fd); ft_putstr_fd(")", fd); ft_putendl_fd(" malloc: mmap failed", fd); } diff --git a/malloc/srcs/free.c b/malloc/srcs/free.c index e08e38ce..01a071f0 100644 --- a/malloc/srcs/free.c +++ b/malloc/srcs/free.c @@ -6,19 +6,20 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ -/* Updated: 2017/10/07 16:29:44 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 17:32:14 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" +#include -volatile int g_malloc_debug; +int g_malloc_debug; +t_chunk *g_zones[M_ZONES_MAX]; int coalesce_nodes(t_node *node) { t_node *next; - show_alloc_mem(); if (node->islast) return (0); next = (void*)node + node->size; @@ -35,33 +36,27 @@ int coalesce_nodes(t_node *node) return (0); } -int ret_free(void *ptr) +int ft_free(void *ptr) { - t_chunk *zone; t_node *node; t_node *prev; if (!ptr) return (2); + if (g_malloc_debug >= 2) + show_alloc_mem(); node = ptr - M_NODEHEAD; - zone = *get_zone(node->size); - if (!(prev = find_prev_node(zone, node))) + if (!((prev = find_prev_node(g_zones[M_TINY], node)) + || (prev = find_prev_node(g_zones[M_SMALL], node)) + || (prev = find_prev_node(g_zones[M_LARGE], node)))) { + if (g_malloc_debug >= 2) + error_free_notalloc(ptr); return (1); } node->isfree = 1; coalesce_nodes(prev); - return (0); -} - -void ft_free(void *ptr) -{ - if (g_malloc_debug >= 1) - DGSH("free called with addr", (long)ptr); if (g_malloc_debug >= 2) show_alloc_mem(); - if (ret_free(ptr) == 1) - error_free_notalloc(ptr); - if (g_malloc_debug >= 1) - show_alloc_mem(); + return (0); } diff --git a/malloc/srcs/ft_memcpy.c b/malloc/srcs/ft_memcpy.c new file mode 100644 index 00000000..1754c420 --- /dev/null +++ b/malloc/srcs/ft_memcpy.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:31 by jhalford #+# #+# */ +/* Updated: 2017/10/22 12:46:59 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + char *c1; + char *c2; + + if (n == 0 || dst == src) + return (dst); + c1 = (char *)dst; + c2 = (char *)src; + while (--n) + *c1++ = *c2++; + *c1 = *c2; + return (dst); +} diff --git a/malloc/srcs/ft_memset.c b/malloc/srcs/ft_memset.c new file mode 100644 index 00000000..cf02288e --- /dev/null +++ b/malloc/srcs/ft_memset.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/22 14:37:31 by jhalford #+# #+# */ +/* Updated: 2017/10/22 15:00:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +void *ft_memset(void *b, int c, size_t len) +{ + size_t i; + + i = -1; + while (++i < len) + ((unsigned char *)b)[i] = (unsigned char)c; + return (b); +} diff --git a/malloc/srcs/ft_putstr.c b/malloc/srcs/ft_putstr.c index 58acc346..f09352b4 100644 --- a/malloc/srcs/ft_putstr.c +++ b/malloc/srcs/ft_putstr.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/07 17:07:41 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:08:06 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 15:30:37 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/interface.c b/malloc/srcs/interface.c new file mode 100644 index 00000000..9b8cea12 --- /dev/null +++ b/malloc/srcs/interface.c @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* interface.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/22 13:25:32 by jhalford #+# #+# */ +/* Updated: 2017/10/22 17:34:54 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +t_chunk *g_zones[M_ZONES_MAX] = +{ + NULL, + NULL, + NULL, +}; +int g_malloc_debug = 0; +pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; + +void *malloc(size_t size) +{ + void *new_ptr; + + pthread_mutex_lock(&g_mutex); + if (g_malloc_debug >= 1) + DGS("malloc called"); + new_ptr = ft_malloc(size); + pthread_mutex_unlock(&g_mutex); + return (new_ptr); +} + +void free(void *ptr) +{ + pthread_mutex_lock(&g_mutex); + if (g_malloc_debug >= 1) + DGS("free called"); + ft_free(ptr); + pthread_mutex_unlock(&g_mutex); + return ; +} + +void *realloc(void *ptr, size_t size) +{ + void *new_ptr; + + pthread_mutex_lock(&g_mutex); + if (g_malloc_debug >= 1) + DGS("realloc called"); + new_ptr = ft_realloc(ptr, size); + pthread_mutex_unlock(&g_mutex); + return (new_ptr); +} diff --git a/malloc/srcs/interface_extended.c b/malloc/srcs/interface_extended.c new file mode 100644 index 00000000..f7d72d1f --- /dev/null +++ b/malloc/srcs/interface_extended.c @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* interface_extended.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/22 17:32:51 by jhalford #+# #+# */ +/* Updated: 2017/10/22 17:36:16 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +t_chunk *g_zones[M_ZONES_MAX]; +int g_malloc_debug; +pthread_mutex_t g_mutex; + +void *reallocf(void *ptr, size_t size) +{ + void *new_ptr; + + pthread_mutex_lock(&g_mutex); + if (g_malloc_debug >= 1) + DGS("reallocf called"); + new_ptr = ft_reallocf(ptr, size); + pthread_mutex_unlock(&g_mutex); + return (new_ptr); +} + +void *calloc(size_t count, size_t size) +{ + void *new_ptr; + + pthread_mutex_lock(&g_mutex); + if (g_malloc_debug >= 1) + DGS("calloc called"); + new_ptr = ft_calloc(count, size); + pthread_mutex_unlock(&g_mutex); + return (new_ptr); +} + +void show_alloc_mem(void) +{ + pthread_mutex_lock(&g_mutex); + show_chunk("TINY: ", g_zones[M_TINY], 0); + show_chunk("SMALL: ", g_zones[M_SMALL], 0); + show_chunk("LARGE: ", g_zones[M_LARGE], 0); + pthread_mutex_unlock(&g_mutex); +} + +void dump_alloc_mem(void) +{ + pthread_mutex_lock(&g_mutex); + show_chunk("TINY: ", g_zones[M_TINY], 1); + show_chunk("SMALL: ", g_zones[M_SMALL], 1); + show_chunk("LARGE: ", g_zones[M_LARGE], 1); + pthread_mutex_unlock(&g_mutex); +} diff --git a/malloc/srcs/malloc.c b/malloc/srcs/malloc.c index 777123b7..0e7da332 100644 --- a/malloc/srcs/malloc.c +++ b/malloc/srcs/malloc.c @@ -6,20 +6,15 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/10/08 17:29:52 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 17:29:44 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "malloc_internal.h" -t_chunk *g_zones[M_ZONES_MAX] = -{ - NULL, - NULL, - NULL, -}; - -volatile int g_malloc_debug = 0; +t_chunk *g_zones[M_ZONES_MAX]; +int g_malloc_debug; +pthread_mutex_t g_mutex; t_chunk **get_zone(size_t size) { @@ -46,7 +41,7 @@ void add_chunk(t_chunk **chunk, size_t size) MAP_ANON | MAP_PRIVATE, -1, 0))) error_mmap(); if (g_malloc_debug >= 3) - DGSN("malloc_debug", g_malloc_debug); + DGSH("mmap returned", (long)new); new->next = *chunk; *chunk = new; node = (t_node*)(*chunk + 1); @@ -61,13 +56,9 @@ void *ft_malloc(size_t size) t_node *node; void *ret; - if (g_malloc_debug >= 1) - DGSN("malloc called with size", size); + g_malloc_debug = 0; if (g_malloc_debug >= 2) - { - DGSN("malloc", size); show_alloc_mem(); - } size += M_NODEHEAD; zone = get_zone(size); while (!(node = find_node_firstfit(*zone, size))) @@ -75,9 +66,8 @@ void *ft_malloc(size_t size) split_node(node, size); ret = (void*)(node + 1); if (g_malloc_debug >= 1) - { DGSH("user got ptr", (long)ret); + if (g_malloc_debug >= 2) show_alloc_mem(); - } return (ret); } diff --git a/malloc/srcs/node_lib.c b/malloc/srcs/node_lib.c index 5ebc7966..d0b43668 100644 --- a/malloc/srcs/node_lib.c +++ b/malloc/srcs/node_lib.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:15 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:09:11 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 17:17:14 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/realloc.c b/malloc/srcs/realloc.c index dd4739fb..0137f7a9 100644 --- a/malloc/srcs/realloc.c +++ b/malloc/srcs/realloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/18 13:23:20 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:08:46 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 17:28:05 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,16 @@ void *ft_realloc(void *ptr, size_t size) { - if (ret_free(ptr)) + void *new; + size_t old_size; + + if (!ptr) + return (ft_malloc(size)); + if (ft_free(ptr)) return (NULL); - return (ft_malloc(size)); + old_size = ((t_node*)(ptr - M_NODEHEAD))->size; + if (!(new = ft_malloc(size))) + return (NULL); + ft_memcpy(new, ptr, old_size); + return (new); } diff --git a/malloc/srcs/reallocf.c b/malloc/srcs/reallocf.c new file mode 100644 index 00000000..f17ae8f5 --- /dev/null +++ b/malloc/srcs/reallocf.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* reallocf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/22 13:33:57 by jhalford #+# #+# */ +/* Updated: 2017/10/22 17:28:02 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" + +extern pthread_mutex_t g_mutex; + +void *ft_reallocf(void *ptr, size_t size) +{ + void *new_ptr; + + if (!(new_ptr = ft_realloc(ptr, size))) + ft_free(ptr); + return (new_ptr); +} diff --git a/malloc/srcs/show_alloc_mem.c b/malloc/srcs/show_alloc_mem.c index c068a1dd..f77c14f3 100644 --- a/malloc/srcs/show_alloc_mem.c +++ b/malloc/srcs/show_alloc_mem.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:20 by jhalford #+# #+# */ -/* Updated: 2017/10/07 17:06:14 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 13:37:38 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -54,17 +54,3 @@ void show_chunk(char *name, t_chunk *chunk, int dump) chunk = chunk->next; } } - -void show_alloc_mem(void) -{ - show_chunk("TINY: ", g_zones[M_TINY], 0); - show_chunk("SMALL: ", g_zones[M_SMALL], 0); - show_chunk("LARGE: ", g_zones[M_LARGE], 0); -} - -void dump_alloc_mem(void) -{ - show_chunk("TINY: ", g_zones[M_TINY], 1); - show_chunk("SMALL: ", g_zones[M_SMALL], 1); - show_chunk("LARGE: ", g_zones[M_LARGE], 1); -} diff --git a/malloc/srcs/valloc.c b/malloc/srcs/valloc.c new file mode 100644 index 00000000..48f456da --- /dev/null +++ b/malloc/srcs/valloc.c @@ -0,0 +1,13 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* valloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/22 15:00:53 by jhalford #+# #+# */ +/* Updated: 2017/10/22 17:11:32 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "malloc_internal.h" diff --git a/malloc/tests/test0.c b/malloc/tests/test0.c index af8a0efe..9db9c897 100644 --- a/malloc/tests/test0.c +++ b/malloc/tests/test0.c @@ -1,4 +1,5 @@ #include "../includes/malloc.h" +#include int main(void) { @@ -6,6 +7,7 @@ int main(void) char *addr; i = 0; + printf("check"); while (i < 1024) { i++; diff --git a/malloc/tests/test1.c b/malloc/tests/test1.c index b2172b62..69d28f35 100644 --- a/malloc/tests/test1.c +++ b/malloc/tests/test1.c @@ -1,6 +1,6 @@ #include "../includes/malloc.h" -void *ft_malloc(size_t size); +void *malloc(size_t size); int main(void) { int i; @@ -9,7 +9,7 @@ int main(void) i = 0; while (i < 1024) { - addr = (char*)ft_malloc(1024); + addr = (char*)malloc(1024); addr[0] = 42; i++; } diff --git a/malloc/tests/test2.c b/malloc/tests/test2.c index a9418b84..c65bdc0e 100644 --- a/malloc/tests/test2.c +++ b/malloc/tests/test2.c @@ -8,9 +8,9 @@ int main(void) i = 0; while (i < 1024) { - addr = (char*)ft_malloc(1024); + addr = (char*)malloc(1024); addr[0] = 42; - ft_free(addr); + free(addr); i++; } return (0); diff --git a/malloc/tests/test3.5.c b/malloc/tests/test3.5.c deleted file mode 100644 index 8e045aa2..00000000 --- a/malloc/tests/test3.5.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "../includes/malloc.h" -#include -#include - -#define M (1024 * 1024) - -void print(char *s) -{ - write(1, s, strlen(s)); -} - -int main(void) -{ - char *addr1; - char *addr2; - char *addr3; - - addr1 = (char*)ft_malloc(16*M); - strcpy(addr1, "Bonjours\n"); - print(addr1); - addr2 = (char*)ft_malloc(16*M); - addr3 = (char*)ft_realloc(addr1, 128*M); - addr3[127*M] = 42; - print(addr3); - return (0); -} diff --git a/malloc/tests/test3.c b/malloc/tests/test3.c index 2100874d..8381fa06 100644 --- a/malloc/tests/test3.c +++ b/malloc/tests/test3.c @@ -15,10 +15,10 @@ int main(void) char *addr1; char *addr3; - addr1 = (char*)ft_malloc(16*M); + addr1 = (char*)malloc(16*M); strcpy(addr1, "Bonjours\n"); print(addr1); - addr3 = (char*)ft_realloc(addr1, 128*M); + addr3 = (char*)realloc(addr1, 128*M); addr3[127*M] = 42; print(addr3); return (0); diff --git a/malloc/tests/test4.c b/malloc/tests/test4.c index 5b433edf..9bb9f3d1 100644 --- a/malloc/tests/test4.c +++ b/malloc/tests/test4.c @@ -11,10 +11,10 @@ int main(void) { char *addr; - addr = ft_malloc(16); - ft_free(NULL); - ft_free((void*)addr + 5); - if (ft_realloc((void*)addr + 5, 10) == NULL) + addr = malloc(16); + free(NULL); + free((void*)addr + 5); + if (realloc((void*)addr + 5, 10) == NULL) print("Bonjours\n"); return (0); } diff --git a/malloc/tests/test5.c b/malloc/tests/test5.c index e1a9647d..e01aadb9 100644 --- a/malloc/tests/test5.c +++ b/malloc/tests/test5.c @@ -2,11 +2,11 @@ int main(void) { - ft_malloc(1024); - ft_malloc(1024 * 32); - ft_malloc(1024 * 1024); - ft_malloc(1024 * 1024 * 16); - ft_malloc(1024 * 1024 * 128); + malloc(1024); + malloc(1024 * 32); + malloc(1024 * 1024); + malloc(1024 * 1024 * 16); + malloc(1024 * 1024 * 128); show_alloc_mem(); return (0); } From 4c789ad847064f8f112af1db64e8efde9dd91ab2 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 22 Oct 2017 18:46:01 +0200 Subject: [PATCH 23/27] 1 --- malloc/Makefile | 3 +-- malloc/srcs/calloc.c | 2 +- malloc/srcs/interface_extended.c | 2 +- malloc/srcs/malloc.c | 3 +-- malloc/srcs/valloc.c | 13 ------------- 5 files changed, 4 insertions(+), 19 deletions(-) delete mode 100644 malloc/srcs/valloc.c diff --git a/malloc/Makefile b/malloc/Makefile index 2197234c..e7a9693e 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -45,8 +45,7 @@ malloc.c\ node_lib.c\ realloc.c\ reallocf.c\ -show_alloc_mem.c\ -valloc.c +show_alloc_mem.c SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) diff --git a/malloc/srcs/calloc.c b/malloc/srcs/calloc.c index 164fca5f..56ae14df 100644 --- a/malloc/srcs/calloc.c +++ b/malloc/srcs/calloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/22 14:35:06 by jhalford #+# #+# */ -/* Updated: 2017/10/22 17:30:13 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 18:44:24 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/interface_extended.c b/malloc/srcs/interface_extended.c index f7d72d1f..523bc67d 100644 --- a/malloc/srcs/interface_extended.c +++ b/malloc/srcs/interface_extended.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/22 17:32:51 by jhalford #+# #+# */ -/* Updated: 2017/10/22 17:36:16 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 18:45:28 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/malloc.c b/malloc/srcs/malloc.c index 0e7da332..04dfefed 100644 --- a/malloc/srcs/malloc.c +++ b/malloc/srcs/malloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/10/22 17:29:44 by jhalford ### ########.fr */ +/* Updated: 2017/10/22 18:45:48 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -56,7 +56,6 @@ void *ft_malloc(size_t size) t_node *node; void *ret; - g_malloc_debug = 0; if (g_malloc_debug >= 2) show_alloc_mem(); size += M_NODEHEAD; diff --git a/malloc/srcs/valloc.c b/malloc/srcs/valloc.c deleted file mode 100644 index 48f456da..00000000 --- a/malloc/srcs/valloc.c +++ /dev/null @@ -1,13 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* valloc.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2017/10/22 15:00:53 by jhalford #+# #+# */ -/* Updated: 2017/10/22 17:11:32 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "malloc_internal.h" From 931cdbe9e554fe4b1cce151abba36d7bee153368 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 22 Oct 2017 18:46:41 +0200 Subject: [PATCH 24/27] ignore .bin --- malloc/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/malloc/.gitignore b/malloc/.gitignore index 16b8625d..c8d8b266 100644 --- a/malloc/.gitignore +++ b/malloc/.gitignore @@ -4,3 +4,4 @@ libft_malloc_*.so libft_malloc.so tests/* !test/*.c +.bin From a28c11d35afa5076eaccce8416f79a09e9d071cb Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Mon, 23 Oct 2017 19:42:30 +0200 Subject: [PATCH 25/27] done --- malloc/srcs/free.c | 2 +- malloc/srcs/interface.c | 4 ++-- malloc/srcs/interface_extended.c | 2 +- malloc/srcs/malloc.c | 2 +- malloc/srcs/show_alloc_mem.c | 2 +- malloc/tests/test0.c | 1 - 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/malloc/srcs/free.c b/malloc/srcs/free.c index 01a071f0..9414e2ae 100644 --- a/malloc/srcs/free.c +++ b/malloc/srcs/free.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:03 by jhalford #+# #+# */ -/* Updated: 2017/10/22 17:32:14 by jhalford ### ########.fr */ +/* Updated: 2017/10/23 19:32:20 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/interface.c b/malloc/srcs/interface.c index 9b8cea12..306a31ff 100644 --- a/malloc/srcs/interface.c +++ b/malloc/srcs/interface.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/22 13:25:32 by jhalford #+# #+# */ -/* Updated: 2017/10/22 17:34:54 by jhalford ### ########.fr */ +/* Updated: 2017/10/23 19:41:14 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,7 @@ t_chunk *g_zones[M_ZONES_MAX] = NULL, NULL, }; -int g_malloc_debug = 0; +int g_malloc_debug = 1; pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; void *malloc(size_t size) diff --git a/malloc/srcs/interface_extended.c b/malloc/srcs/interface_extended.c index 523bc67d..34aebd4c 100644 --- a/malloc/srcs/interface_extended.c +++ b/malloc/srcs/interface_extended.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/22 17:32:51 by jhalford #+# #+# */ -/* Updated: 2017/10/22 18:45:28 by jhalford ### ########.fr */ +/* Updated: 2017/10/23 19:40:43 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/malloc.c b/malloc/srcs/malloc.c index 04dfefed..d04c44e9 100644 --- a/malloc/srcs/malloc.c +++ b/malloc/srcs/malloc.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:02 by jhalford #+# #+# */ -/* Updated: 2017/10/22 18:45:48 by jhalford ### ########.fr */ +/* Updated: 2017/10/23 19:41:03 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/srcs/show_alloc_mem.c b/malloc/srcs/show_alloc_mem.c index f77c14f3..e586223b 100644 --- a/malloc/srcs/show_alloc_mem.c +++ b/malloc/srcs/show_alloc_mem.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/17 12:28:20 by jhalford #+# #+# */ -/* Updated: 2017/10/22 13:37:38 by jhalford ### ########.fr */ +/* Updated: 2017/10/23 19:42:14 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/malloc/tests/test0.c b/malloc/tests/test0.c index 9db9c897..d3120a9b 100644 --- a/malloc/tests/test0.c +++ b/malloc/tests/test0.c @@ -7,7 +7,6 @@ int main(void) char *addr; i = 0; - printf("check"); while (i < 1024) { i++; From c45d6d53c2f659657243631185a7aff0e1234af8 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Mon, 23 Oct 2017 19:45:49 +0200 Subject: [PATCH 26/27] run --- malloc/run.sh | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 malloc/run.sh diff --git a/malloc/run.sh b/malloc/run.sh deleted file mode 100644 index 19faa239..00000000 --- a/malloc/run.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -export DYLD_LIBRARY_PATH=. -export DYLD_INSERT_LIBRARIES="libft_malloc.so" -export DYLD_FORCE_FLAT_NAMESPACE=1 -$@ From 773d6d6f8b30b9f2adc94127d2f3cc92c124f4af Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Tue, 24 Oct 2017 18:20:08 +0200 Subject: [PATCH 27/27] run is back --- malloc/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/malloc/.gitignore b/malloc/.gitignore index c8d8b266..b804db92 100644 --- a/malloc/.gitignore +++ b/malloc/.gitignore @@ -4,4 +4,5 @@ libft_malloc_*.so libft_malloc.so tests/* !test/*.c +!test/*.sh .bin