chore: upload save

This commit is contained in:
gbrochar 2025-07-17 12:28:27 +02:00
parent 00f1d503c1
commit 4121fcd7fd
6 changed files with 45 additions and 22 deletions

3
any_test.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
make
LD_LIBRARY_PATH=. LD_PRELOAD=./libft_malloc.so $@

View File

@ -5,6 +5,7 @@
# include <unistd.h>
# include <sys/mman.h>
# include <pthread.h>
# include <stdarg.h>
// TODO Remove me (printf)
# include <stdio.h>
@ -40,6 +41,7 @@ typedef struct s_zones {
extern pthread_mutex_t g_malloc_mutex;
extern t_zones g_zones;
size_t malloc_usable_size(void *ptr);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);

View File

@ -1,29 +1,23 @@
#include "malloc.h"
void free(void *ptr) {
write(1, "free\n", 5);
ft_printf("free %p\n", ptr);
pthread_mutex_lock(&g_malloc_mutex);
write(1, "free\n", 5);
if (ptr == NULL) {
ft_printf("free null\n");
pthread_mutex_unlock(&g_malloc_mutex);
return;
}
t_block *block = (t_block *)((char *)ptr - sizeof(t_block));
write(1, "free\n", 5);
if (block->size < g_zones.small_block_max_size) {
write(1, "rree\n", 5);
block->free = 1;
} else {
write(1, "1\n", 2);
t_block *curr = g_zones.large_blocks;
if (curr == NULL) {
write(1, "E\n", 2);
pthread_mutex_unlock(&g_malloc_mutex);
return;
}
if ((char *)curr + sizeof(t_block) == (char *)ptr) {
write(1, "2\n", 2);
g_zones.large_blocks = curr->next;
munmap((char *)ptr - sizeof(t_block) - (16 - sizeof(t_block) % 16), curr->size + sizeof(t_block) + (16 - sizeof(t_block) % 16));
pthread_mutex_unlock(&g_malloc_mutex);
@ -37,10 +31,10 @@ void free(void *ptr) {
return;
}
}
write(1, "3\n", 2);
t_block *to_free = curr->next;
curr->next = curr->next->next;
munmap((char *)ptr - sizeof(t_block) - (16 - sizeof(t_block) % 16), to_free->size + sizeof(t_block) + (16 - sizeof(t_block) % 16));
}
pthread_mutex_unlock(&g_malloc_mutex);
}

View File

@ -30,3 +30,9 @@ static void init_malloc(void) {
g_zones.large_blocks = NULL;
}
__attribute__((destructor))
static void dest_malloc(void) {
ft_printf("Destructor called\n");
show_alloc_mem();
}

View File

@ -22,7 +22,7 @@ void *malloc_tiny(size_t size) {
}
zone->head = (t_block *)addr;
curr = zone->head;
ft_printf("addr of g_zones.tiny_zones : %p\n"
/* ft_printf("addr of g_zones.tiny_zones : %p\n"
"addr of zone : %p\n"
"addr of *head %p\n"
"sizeof tzone : %d\n"
@ -31,10 +31,11 @@ void *malloc_tiny(size_t size) {
zone,
curr,
sizeof(t_zone),
sizeof(t_block));
sizeof(t_block));*/
curr->size = size;
curr->free = 0;
curr->next = NULL;
ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block)));
return (void *)((char *)(curr) + sizeof(t_block));
}
else {
@ -54,6 +55,7 @@ void *malloc_tiny(size_t size) {
curr->size = size;
curr->free = 0;
curr->next = NULL;
ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block)));
return (void *)((char *)curr + sizeof(t_block));
}
if (zone->next == NULL) {
@ -88,7 +90,7 @@ void *malloc_small(size_t size) {
}
zone->head = (t_block *)addr;
curr = zone->head;
ft_printf("addr of g_zones.small_zones : %p\n"
/*ft_printf("addr of g_zones.small_zones : %p\n"
"addr of zone : %p\n"
"addr of *head %p\n"
"sizeof tzone : %d\n"
@ -97,10 +99,11 @@ void *malloc_small(size_t size) {
zone,
curr,
sizeof(t_zone),
sizeof(t_block));
sizeof(t_block));*/
curr->size = size;
curr->free = 0;
curr->next = NULL;
ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block)));
return (void *)((char *)(curr) + sizeof(t_block));
}
else {
@ -120,6 +123,7 @@ void *malloc_small(size_t size) {
curr->size = size;
curr->free = 0;
curr->next = NULL;
ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block)));
return (void *)((char *)curr + sizeof(t_block));
}
if (zone->next == NULL) {
@ -141,6 +145,7 @@ void *malloc_large(size_t size) {
curr->size = size;
curr->free = 0;
curr->next = NULL;
ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block)));
return (void *)((char *)curr + sizeof(t_block));
}
while (curr->next) {
@ -152,24 +157,35 @@ void *malloc_large(size_t size) {
curr->size = size;
curr->free = 0;
curr->next = NULL;
ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block)));
return (void *)((char *)curr + sizeof(t_block));
}
void *malloc(size_t size) {
pthread_mutex_lock(&g_malloc_mutex);
ft_printf("malloc %d\n", size);
void *ptr = NULL;
if (size < g_zones.tiny_block_max_size) {
write(1, "malloc tiny\n", 12);
ft_printf("malloc tiny %d\n", size);
ptr = malloc_tiny(size);
} else if (size < g_zones.small_block_max_size) {
write(1, "malloc small\n", 13);
ft_printf("malloc small %d\n", size);
ptr = malloc_small(size);
} else {
write(1, "malloc large\n", 13);
ft_printf("malloc large %d\n", size);
ptr = malloc_large(size);
}
pthread_mutex_unlock(&g_malloc_mutex);
return ptr;
}
size_t malloc_usable_size(void *ptr) {
show_alloc_mem();
ft_printf("on est la %p\n", ptr);
if (!ptr) {
return 0;
}
t_block *block = (t_block *)((char *)ptr - sizeof(t_block));
ft_printf("on est la %d\n", block->size);
return block->size;
}

View File

@ -83,5 +83,7 @@ void *realloc(void *ptr, size_t size) {
ft_printf("exiting\n");
show_alloc_mem();
pthread_mutex_unlock(&g_malloc_mutex);
ft_printf("returning\n");
return ptr;
}