From 5c78200d8f82d02a4b1a68912694b2b22d4763bd Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 16 Feb 2017 01:26:55 +0100 Subject: [PATCH] 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