This commit is contained in:
Jack Halford 2017-02-21 18:22:11 +01:00
parent 555d3e2cc5
commit 3822058609
24 changed files with 226 additions and 53 deletions

1
malloc/.gitignore vendored
View file

@ -1,2 +1,3 @@
myprogram
*.o
libft_malloc_*.so

View file

@ -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))

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);

@ -1 +1 @@
Subproject commit 67a19bb3e8f4eedde0fcdec6ebfec97a615ad81b
Subproject commit bfc8ca207ab4d39f0140322c0f1d368137304a3c

View file

@ -1,5 +0,0 @@
#!/bin/sh
export DYLD_LIBRARY_PATH="."
export DYLD_INSERT_LIBRARIES="libft_malloc.so"
export DYLD_FORCE_FLAT_NAMESPACE=1
$@

21
malloc/src/calloc.c Normal file
View file

@ -0,0 +1,21 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* calloc.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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); */
}

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);

21
malloc/src/reallocf.c Normal file
View file

@ -0,0 +1,21 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* reallocf.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */

20
malloc/src/valloc.c Normal file
View file

@ -0,0 +1,20 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* valloc.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}

View file

@ -1,20 +0,0 @@
#include <stdlib.h>
#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();
}

5
malloc/tests/run.sh Executable file
View file

@ -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
$@

BIN
malloc/tests/test0 Executable file

Binary file not shown.

15
malloc/tests/test0.c Normal file
View file

@ -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);
}

BIN
malloc/tests/test1 Executable file

Binary file not shown.

16
malloc/tests/test1.c Normal file
View file

@ -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);
}

17
malloc/tests/test2.c Normal file
View file

@ -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);
}

24
malloc/tests/test3.5.c Normal file
View file

@ -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);
}

22
malloc/tests/test3.c Normal file
View file

@ -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);
}

18
malloc/tests/test4.c Normal file
View file

@ -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);
}

12
malloc/tests/test5.c Normal file
View file

@ -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);
}