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 00000000..a4728a42 Binary files /dev/null and b/malloc/tests/test0 differ diff --git a/malloc/tests/test0.c b/malloc/tests/test0.c new file mode 100644 index 00000000..e1874458 --- /dev/null +++ b/malloc/tests/test0.c @@ -0,0 +1,15 @@ +#include "../includes/malloc.h" + +int main(void) +{ + int i; + char *addr; + + i = 0; + valloc(42); + while (i < 1024) + { + i++; + } + return (0); +} diff --git a/malloc/tests/test1 b/malloc/tests/test1 new file mode 100755 index 00000000..2f1e47f9 Binary files /dev/null and b/malloc/tests/test1 differ 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); +}