diff --git a/Makefile b/Makefile index 71e4056..2676662 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,8 @@ SRCS := $(SRCS_DIR)/ft_malloc.c \ $(SRCS_DIR)/ft_calloc.c \ $(SRCS_DIR)/ft_realloc.c \ $(SRCS_DIR)/init_state.c \ - $(SRCS_DIR)/bonus_utils.c + $(SRCS_DIR)/bonus_utils.c \ + $(SRCS_DIR)/utils.c OBJS := $(SRCS:.c=.o) diff --git a/includes/ft_malloc_public.h b/includes/ft_malloc_public.h index b82a6eb..3e708c9 100644 --- a/includes/ft_malloc_public.h +++ b/includes/ft_malloc_public.h @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* ft_malloc_public.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: thrieg < thrieg@student.42mulhouse.fr> +#+ +:+ +#+ */ +/* By: thrieg +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/25 12:31:43 by thrieg #+# #+# */ -/* Updated: 2025/11/28 18:26:47 by thrieg ### ########.fr */ +/* Updated: 2025/12/13 05:34:43 by thrieg ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,5 +21,6 @@ void free(void *ptr); void *calloc(size_t nmemb, size_t size); void *realloc(void *ptr, size_t size); void show_alloc_mem_ex(bool hexdump_free_zones); +void show_alloc_mem(); #endif \ No newline at end of file diff --git a/libft/ft_addr_to_str.o b/libft/ft_addr_to_str.o deleted file mode 100644 index 171eb3e..0000000 Binary files a/libft/ft_addr_to_str.o and /dev/null differ diff --git a/libft/ft_atoi.o b/libft/ft_atoi.o deleted file mode 100644 index 7f2b5fc..0000000 Binary files a/libft/ft_atoi.o and /dev/null differ diff --git a/libft/ft_bzero.o b/libft/ft_bzero.o deleted file mode 100644 index f4be140..0000000 Binary files a/libft/ft_bzero.o and /dev/null differ diff --git a/libft/ft_calloc.o b/libft/ft_calloc.o deleted file mode 100644 index 8705130..0000000 Binary files a/libft/ft_calloc.o and /dev/null differ diff --git a/libft/ft_hashmap/ft_hashmap.o b/libft/ft_hashmap/ft_hashmap.o deleted file mode 100644 index 1516cb5..0000000 Binary files a/libft/ft_hashmap/ft_hashmap.o and /dev/null differ diff --git a/libft/ft_hashmap/ft_hashmap_advanced_type_hash.o b/libft/ft_hashmap/ft_hashmap_advanced_type_hash.o deleted file mode 100644 index c489238..0000000 Binary files a/libft/ft_hashmap/ft_hashmap_advanced_type_hash.o and /dev/null differ diff --git a/libft/ft_hashmap/ft_hashmap_basic_cmp.o b/libft/ft_hashmap/ft_hashmap_basic_cmp.o deleted file mode 100644 index 19492c4..0000000 Binary files a/libft/ft_hashmap/ft_hashmap_basic_cmp.o and /dev/null differ diff --git a/libft/ft_hashmap/ft_hashmap_basic_type_hash.o b/libft/ft_hashmap/ft_hashmap_basic_type_hash.o deleted file mode 100644 index 5747da2..0000000 Binary files a/libft/ft_hashmap/ft_hashmap_basic_type_hash.o and /dev/null differ diff --git a/libft/ft_hashmap/ft_hashmap_utils.o b/libft/ft_hashmap/ft_hashmap_utils.o deleted file mode 100644 index c23f249..0000000 Binary files a/libft/ft_hashmap/ft_hashmap_utils.o and /dev/null differ diff --git a/libft/ft_hashmap/ft_hashmap_utils_two.o b/libft/ft_hashmap/ft_hashmap_utils_two.o deleted file mode 100644 index 9607796..0000000 Binary files a/libft/ft_hashmap/ft_hashmap_utils_two.o and /dev/null differ diff --git a/libft/ft_int_utils.o b/libft/ft_int_utils.o deleted file mode 100644 index 3372703..0000000 Binary files a/libft/ft_int_utils.o and /dev/null differ diff --git a/libft/ft_isalnum.o b/libft/ft_isalnum.o deleted file mode 100644 index b3d2091..0000000 Binary files a/libft/ft_isalnum.o and /dev/null differ diff --git a/libft/ft_isalpha.o b/libft/ft_isalpha.o deleted file mode 100644 index ed31452..0000000 Binary files a/libft/ft_isalpha.o and /dev/null differ diff --git a/libft/ft_isascii.o b/libft/ft_isascii.o deleted file mode 100644 index 58f2fb9..0000000 Binary files a/libft/ft_isascii.o and /dev/null differ diff --git a/libft/ft_isdigit.o b/libft/ft_isdigit.o deleted file mode 100644 index 620afc9..0000000 Binary files a/libft/ft_isdigit.o and /dev/null differ diff --git a/libft/ft_isprint.o b/libft/ft_isprint.o deleted file mode 100644 index 701285b..0000000 Binary files a/libft/ft_isprint.o and /dev/null differ diff --git a/libft/ft_itoa.o b/libft/ft_itoa.o deleted file mode 100644 index ac4552b..0000000 Binary files a/libft/ft_itoa.o and /dev/null differ diff --git a/libft/ft_itoa_base.o b/libft/ft_itoa_base.o deleted file mode 100644 index 4b3cb94..0000000 Binary files a/libft/ft_itoa_base.o and /dev/null differ diff --git a/libft/ft_long_utils.o b/libft/ft_long_utils.o deleted file mode 100644 index 6ec619b..0000000 Binary files a/libft/ft_long_utils.o and /dev/null differ diff --git a/libft/ft_lstadd_back_bonus.o b/libft/ft_lstadd_back_bonus.o deleted file mode 100644 index 20a117a..0000000 Binary files a/libft/ft_lstadd_back_bonus.o and /dev/null differ diff --git a/libft/ft_lstadd_front_bonus.o b/libft/ft_lstadd_front_bonus.o deleted file mode 100644 index d802309..0000000 Binary files a/libft/ft_lstadd_front_bonus.o and /dev/null differ diff --git a/libft/ft_lstclear_bonus.o b/libft/ft_lstclear_bonus.o deleted file mode 100644 index 33a483d..0000000 Binary files a/libft/ft_lstclear_bonus.o and /dev/null differ diff --git a/libft/ft_lstdelone_bonus.o b/libft/ft_lstdelone_bonus.o deleted file mode 100644 index 57fa2be..0000000 Binary files a/libft/ft_lstdelone_bonus.o and /dev/null differ diff --git a/libft/ft_lstiter_bonus.o b/libft/ft_lstiter_bonus.o deleted file mode 100644 index b560c0d..0000000 Binary files a/libft/ft_lstiter_bonus.o and /dev/null differ diff --git a/libft/ft_lstlast_bonus.o b/libft/ft_lstlast_bonus.o deleted file mode 100644 index 9d954a1..0000000 Binary files a/libft/ft_lstlast_bonus.o and /dev/null differ diff --git a/libft/ft_lstmap_bonus.o b/libft/ft_lstmap_bonus.o deleted file mode 100644 index 2f5f000..0000000 Binary files a/libft/ft_lstmap_bonus.o and /dev/null differ diff --git a/libft/ft_lstnew_bonus.o b/libft/ft_lstnew_bonus.o deleted file mode 100644 index 531718f..0000000 Binary files a/libft/ft_lstnew_bonus.o and /dev/null differ diff --git a/libft/ft_lstsize_bonus.o b/libft/ft_lstsize_bonus.o deleted file mode 100644 index 1a8a1f3..0000000 Binary files a/libft/ft_lstsize_bonus.o and /dev/null differ diff --git a/libft/ft_memchr.o b/libft/ft_memchr.o deleted file mode 100644 index 6f09b78..0000000 Binary files a/libft/ft_memchr.o and /dev/null differ diff --git a/libft/ft_memcmp.o b/libft/ft_memcmp.o deleted file mode 100644 index b0c9e05..0000000 Binary files a/libft/ft_memcmp.o and /dev/null differ diff --git a/libft/ft_memcpy.o b/libft/ft_memcpy.o deleted file mode 100644 index 9700482..0000000 Binary files a/libft/ft_memcpy.o and /dev/null differ diff --git a/libft/ft_memmove.o b/libft/ft_memmove.o deleted file mode 100644 index 57bbabc..0000000 Binary files a/libft/ft_memmove.o and /dev/null differ diff --git a/libft/ft_memset.o b/libft/ft_memset.o deleted file mode 100644 index dcfddd6..0000000 Binary files a/libft/ft_memset.o and /dev/null differ diff --git a/libft/ft_power.o b/libft/ft_power.o deleted file mode 100644 index 8285f43..0000000 Binary files a/libft/ft_power.o and /dev/null differ diff --git a/libft/ft_printf/ft_arglist_bonus.o b/libft/ft_printf/ft_arglist_bonus.o deleted file mode 100644 index baffe29..0000000 Binary files a/libft/ft_printf/ft_arglist_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_case_d_bonus.o b/libft/ft_printf/ft_case_d_bonus.o deleted file mode 100644 index f9e6b31..0000000 Binary files a/libft/ft_printf/ft_case_d_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_case_d_utils_bonus.o b/libft/ft_printf/ft_case_d_utils_bonus.o deleted file mode 100644 index 6f41dfe..0000000 Binary files a/libft/ft_printf/ft_case_d_utils_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_case_lowx_bonus.o b/libft/ft_printf/ft_case_lowx_bonus.o deleted file mode 100644 index 28104aa..0000000 Binary files a/libft/ft_printf/ft_case_lowx_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_case_p_bonus.o b/libft/ft_printf/ft_case_p_bonus.o deleted file mode 100644 index 8e641c0..0000000 Binary files a/libft/ft_printf/ft_case_p_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_case_s_bonus.o b/libft/ft_printf/ft_case_s_bonus.o deleted file mode 100644 index 05c9bd0..0000000 Binary files a/libft/ft_printf/ft_case_s_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_case_u_bonus.o b/libft/ft_printf/ft_case_u_bonus.o deleted file mode 100644 index 55caefb..0000000 Binary files a/libft/ft_printf/ft_case_u_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_case_uppx_bonus.o b/libft/ft_printf/ft_case_uppx_bonus.o deleted file mode 100644 index a649e62..0000000 Binary files a/libft/ft_printf/ft_case_uppx_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_cases_easy_bonus.o b/libft/ft_printf/ft_cases_easy_bonus.o deleted file mode 100644 index 921ecdb..0000000 Binary files a/libft/ft_printf/ft_cases_easy_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_cases_mandatory_one.o b/libft/ft_printf/ft_cases_mandatory_one.o deleted file mode 100644 index fdcfbff..0000000 Binary files a/libft/ft_printf/ft_cases_mandatory_one.o and /dev/null differ diff --git a/libft/ft_printf/ft_cases_mandatory_two.o b/libft/ft_printf/ft_cases_mandatory_two.o deleted file mode 100644 index d32c333..0000000 Binary files a/libft/ft_printf/ft_cases_mandatory_two.o and /dev/null differ diff --git a/libft/ft_printf/ft_padding_bonus.o b/libft/ft_printf/ft_padding_bonus.o deleted file mode 100644 index 37e9b2d..0000000 Binary files a/libft/ft_printf/ft_padding_bonus.o and /dev/null differ diff --git a/libft/ft_printf/ft_printf.o b/libft/ft_printf/ft_printf.o deleted file mode 100644 index 2211147..0000000 Binary files a/libft/ft_printf/ft_printf.o and /dev/null differ diff --git a/libft/ft_printf/ft_printf_bonus.o b/libft/ft_printf/ft_printf_bonus.o deleted file mode 100644 index b73bc52..0000000 Binary files a/libft/ft_printf/ft_printf_bonus.o and /dev/null differ diff --git a/libft/ft_priority_queue/ft_priority_queue.o b/libft/ft_priority_queue/ft_priority_queue.o deleted file mode 100644 index 3fc001f..0000000 Binary files a/libft/ft_priority_queue/ft_priority_queue.o and /dev/null differ diff --git a/libft/ft_priority_queue/ft_priority_queue_utils.o b/libft/ft_priority_queue/ft_priority_queue_utils.o deleted file mode 100644 index 8e7d69e..0000000 Binary files a/libft/ft_priority_queue/ft_priority_queue_utils.o and /dev/null differ diff --git a/libft/ft_putchar_fd.o b/libft/ft_putchar_fd.o deleted file mode 100644 index 07b07b6..0000000 Binary files a/libft/ft_putchar_fd.o and /dev/null differ diff --git a/libft/ft_putendl_fd.o b/libft/ft_putendl_fd.o deleted file mode 100644 index ac9620b..0000000 Binary files a/libft/ft_putendl_fd.o and /dev/null differ diff --git a/libft/ft_putnbr_fd.o b/libft/ft_putnbr_fd.o deleted file mode 100644 index 41a714c..0000000 Binary files a/libft/ft_putnbr_fd.o and /dev/null differ diff --git a/libft/ft_putstr_fd.o b/libft/ft_putstr_fd.o deleted file mode 100644 index 8018e8e..0000000 Binary files a/libft/ft_putstr_fd.o and /dev/null differ diff --git a/libft/ft_safe_int_math.o b/libft/ft_safe_int_math.o deleted file mode 100644 index 6b5a803..0000000 Binary files a/libft/ft_safe_int_math.o and /dev/null differ diff --git a/libft/ft_safe_long_math.o b/libft/ft_safe_long_math.o deleted file mode 100644 index a9d8a47..0000000 Binary files a/libft/ft_safe_long_math.o and /dev/null differ diff --git a/libft/ft_split.o b/libft/ft_split.o deleted file mode 100644 index c3a43d3..0000000 Binary files a/libft/ft_split.o and /dev/null differ diff --git a/libft/ft_split2.o b/libft/ft_split2.o deleted file mode 100644 index 27c56ba..0000000 Binary files a/libft/ft_split2.o and /dev/null differ diff --git a/libft/ft_strchr.o b/libft/ft_strchr.o deleted file mode 100644 index cb455a6..0000000 Binary files a/libft/ft_strchr.o and /dev/null differ diff --git a/libft/ft_strcmp.o b/libft/ft_strcmp.o deleted file mode 100644 index be2f475..0000000 Binary files a/libft/ft_strcmp.o and /dev/null differ diff --git a/libft/ft_strdup.o b/libft/ft_strdup.o deleted file mode 100644 index bf06f4d..0000000 Binary files a/libft/ft_strdup.o and /dev/null differ diff --git a/libft/ft_striteri.o b/libft/ft_striteri.o deleted file mode 100644 index 87a31f2..0000000 Binary files a/libft/ft_striteri.o and /dev/null differ diff --git a/libft/ft_strjoin.o b/libft/ft_strjoin.o deleted file mode 100644 index 28d80c0..0000000 Binary files a/libft/ft_strjoin.o and /dev/null differ diff --git a/libft/ft_strlcat.o b/libft/ft_strlcat.o deleted file mode 100644 index d2c8c20..0000000 Binary files a/libft/ft_strlcat.o and /dev/null differ diff --git a/libft/ft_strlcpy.o b/libft/ft_strlcpy.o deleted file mode 100644 index 6fbd8c4..0000000 Binary files a/libft/ft_strlcpy.o and /dev/null differ diff --git a/libft/ft_strlen.o b/libft/ft_strlen.o deleted file mode 100644 index 7822701..0000000 Binary files a/libft/ft_strlen.o and /dev/null differ diff --git a/libft/ft_strmapi.o b/libft/ft_strmapi.o deleted file mode 100644 index 9b3580f..0000000 Binary files a/libft/ft_strmapi.o and /dev/null differ diff --git a/libft/ft_strncmp.o b/libft/ft_strncmp.o deleted file mode 100644 index 0e082da..0000000 Binary files a/libft/ft_strncmp.o and /dev/null differ diff --git a/libft/ft_strnonchr.o b/libft/ft_strnonchr.o deleted file mode 100644 index 6f1bc8b..0000000 Binary files a/libft/ft_strnonchr.o and /dev/null differ diff --git a/libft/ft_strnstr.o b/libft/ft_strnstr.o deleted file mode 100644 index 9a10919..0000000 Binary files a/libft/ft_strnstr.o and /dev/null differ diff --git a/libft/ft_strrchr.o b/libft/ft_strrchr.o deleted file mode 100644 index 8d3e977..0000000 Binary files a/libft/ft_strrchr.o and /dev/null differ diff --git a/libft/ft_strtrim.o b/libft/ft_strtrim.o deleted file mode 100644 index e3e0f2d..0000000 Binary files a/libft/ft_strtrim.o and /dev/null differ diff --git a/libft/ft_substr.o b/libft/ft_substr.o deleted file mode 100644 index da5d69b..0000000 Binary files a/libft/ft_substr.o and /dev/null differ diff --git a/libft/ft_tolower.o b/libft/ft_tolower.o deleted file mode 100644 index c2fbbaa..0000000 Binary files a/libft/ft_tolower.o and /dev/null differ diff --git a/libft/ft_toupper.o b/libft/ft_toupper.o deleted file mode 100644 index e74e84a..0000000 Binary files a/libft/ft_toupper.o and /dev/null differ diff --git a/libft/ft_utoa.o b/libft/ft_utoa.o deleted file mode 100644 index 0b696eb..0000000 Binary files a/libft/ft_utoa.o and /dev/null differ diff --git a/libft/ft_utoa_base.o b/libft/ft_utoa_base.o deleted file mode 100644 index 054f9cd..0000000 Binary files a/libft/ft_utoa_base.o and /dev/null differ diff --git a/libft/ft_vecint.o b/libft/ft_vecint.o deleted file mode 100644 index cd91b8f..0000000 Binary files a/libft/ft_vecint.o and /dev/null differ diff --git a/libft/ft_vector.o b/libft/ft_vector.o deleted file mode 100644 index 8e2e270..0000000 Binary files a/libft/ft_vector.o and /dev/null differ diff --git a/libft/get_next_line/get_next_line.o b/libft/get_next_line/get_next_line.o deleted file mode 100644 index 8bebbab..0000000 Binary files a/libft/get_next_line/get_next_line.o and /dev/null differ diff --git a/libft/get_next_line/get_next_line_utils.o b/libft/get_next_line/get_next_line_utils.o deleted file mode 100644 index b510e2f..0000000 Binary files a/libft/get_next_line/get_next_line_utils.o and /dev/null differ diff --git a/libft/get_next_line/get_next_line_utils_two.o b/libft/get_next_line/get_next_line_utils_two.o deleted file mode 100644 index 002903d..0000000 Binary files a/libft/get_next_line/get_next_line_utils_two.o and /dev/null differ diff --git a/libft/libft.a b/libft/libft.a deleted file mode 100644 index 2d811e5..0000000 Binary files a/libft/libft.a and /dev/null differ diff --git a/libft/sorting/ft_radixsort.o b/libft/sorting/ft_radixsort.o deleted file mode 100644 index 62c6e50..0000000 Binary files a/libft/sorting/ft_radixsort.o and /dev/null differ diff --git a/libft/sorting/ft_sorting.o b/libft/sorting/ft_sorting.o deleted file mode 100644 index 03c3811..0000000 Binary files a/libft/sorting/ft_sorting.o and /dev/null differ diff --git a/main.c b/main.c index 71834dd..c54f92a 100644 --- a/main.c +++ b/main.c @@ -5,7 +5,7 @@ #include /* -** These match your allocator’s thresholds +** match allocator’s thresholds ** (only used here for shaping size distributions) */ #define TINY_MAX 64 diff --git a/main_show_alloc_mem.c b/main_show_alloc_mem.c new file mode 100644 index 0000000..0edf4ff --- /dev/null +++ b/main_show_alloc_mem.c @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main_show_alloc_mem.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: thrieg +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/12/13 05:54:30 by thrieg #+# #+# */ +/* Updated: 2025/12/13 05:55:27 by thrieg ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "includes/ft_malloc_public.h" +#include +#include +#include + +int main(void) +{ + char *a = malloc(10); + char *b = malloc(100); + int *c = malloc(50 * sizeof(int)); + + for (int i = 0; i < 10; ++i) + a[i] = i; + for (int i = 0; i < 100; ++i) + b[i] = 0xAA; + for (int i = 0; i < 50; ++i) + c[i] = i * 2; + + write(1, "\n\n\n\n\nafter first alloc: \n\n\n\n\n", sizeof("\n\n\n\n\nafter first alloc: \n\n\n\n\n") - 1); + show_alloc_mem(); + + free(a); + free(b); + free(c); + + write(1, "\n\n\n\n\nafter free: \n\n\n\n\n", sizeof("\n\n\n\n\nafter free: \n\n\n\n\n") - 1); + show_alloc_mem(); + + a = malloc(20); + b = malloc(1000); + c = malloc(500 * sizeof(int)); + + for (int i = 0; i < 20; ++i) + a[i] = i; + for (int i = 0; i < 1000; ++i) + b[i] = 0xAA; + for (int i = 0; i < 500; ++i) + c[i] = i * 2; + + write(1, "\n\n\n\n\nafter allocating again: \n\n\n\n\n", sizeof("\n\n\n\n\nafter allocating again: \n\n\n\n\n") - 1); + show_alloc_mem(); + + a = realloc(a, 420); // move the block + c = realloc(c, 504 * sizeof(int)); // expend + b = realloc(b, 400); // shrink + + write(1, "\n\n\n\n\nafter realloc: \n\n\n\n\n", sizeof("\n\n\n\n\nafter realloc: \n\n\n\n\n") - 1); + show_alloc_mem(); + + free(a); + free(b); + free(c); + write(1, "\n\n\n\n\nafter free: \n\n\n\n\n", sizeof("\n\n\n\n\nafter free: \n\n\n\n\n") - 1); + show_alloc_mem(); + return (0); +} + +// cc -g main_show_alloc_mem.c -L. -lft_malloc -o test_show +// export LD_LIBRARY_PATH="$PWD" \ No newline at end of file diff --git a/srcs/bonus_utils.c b/srcs/bonus_utils.c index bd90f25..ab5dd4f 100644 --- a/srcs/bonus_utils.c +++ b/srcs/bonus_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* bonus_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: thrieg < thrieg@student.42mulhouse.fr> +#+ +:+ +#+ */ +/* By: thrieg +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/28 16:42:13 by thrieg #+# #+# */ -/* Updated: 2025/11/28 18:25:49 by thrieg ### ########.fr */ +/* Updated: 2025/12/13 04:42:15 by thrieg ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/init_state.c b/srcs/init_state.c index 032e684..f9d8558 100644 --- a/srcs/init_state.c +++ b/srcs/init_state.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* init_state.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: thrieg < thrieg@student.42mulhouse.fr> +#+ +:+ +#+ */ +/* By: thrieg +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/18 16:44:13 by thrieg #+# #+# */ -/* Updated: 2025/12/08 15:32:55 by thrieg ### ########.fr */ +/* Updated: 2025/12/13 05:50:48 by thrieg ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,6 +28,43 @@ void init_env_variables() g_state.is_init = true; } +//inserts a page in the linked list whilst keeping the zones sorted in ascending address +static void zone_insert_sorted(t_zone **head, t_zone *z) +{ + t_zone *cur; + + z->prev = NULL; + z->next = NULL; + + if (*head == NULL) + { + *head = z; + return; + } + + cur = *head; + + // insert before head + if ((uintptr_t)z < (uintptr_t)cur) + { + z->next = cur; + cur->prev = z; + *head = z; + return; + } + + // walk until the next node is after z (or end) + while (cur->next && (uintptr_t)cur->next < (uintptr_t)z) + cur = cur->next; + + // insert after cur + z->next = cur->next; + z->prev = cur; + if (cur->next) + cur->next->prev = z; + cur->next = z; +} + // only call this for TINY or SMALL void *add_page(t_type type) { @@ -51,10 +88,7 @@ void *add_page(t_type type) header->occupied = false; header->size = size - sizeof(t_zone) - sizeof(t_header); header->zone = ptr; - ptr->next = g_state.tiny_zone; // tiny_zone can be NULL but that's fine - if (g_state.tiny_zone) - g_state.tiny_zone->prev = ptr; - g_state.tiny_zone = ptr; + zone_insert_sorted(&g_state.tiny_zone, ptr); } else if (type == E_SMALL) { @@ -64,10 +98,7 @@ void *add_page(t_type type) header->occupied = false; header->size = size - sizeof(t_zone) - sizeof(t_header); header->zone = ptr; - ptr->next = g_state.small_zone; // small_zone can be NULL but that's fine - if (g_state.small_zone) - g_state.small_zone->prev = ptr; - g_state.small_zone = ptr; + zone_insert_sorted(&g_state.small_zone, ptr); } return (ptr); } @@ -83,14 +114,11 @@ void *add_large(size_t size) ptr->size = size; ptr->type = E_LARGE; ptr->prev = NULL; - ptr->next = g_state.large_zone; // large_zone can be NULL but that's fine - if (g_state.large_zone) - g_state.large_zone->prev = ptr; - g_state.large_zone = ptr; t_header *header = (t_header *)(ptr + 1); header->occupied = true; header->size = size - sizeof(t_zone) - sizeof(t_header); header->zone = ptr; + zone_insert_sorted(&g_state.large_zone, ptr); return ((void *)(header + 1)); } diff --git a/srcs/utils.c b/srcs/utils.c new file mode 100644 index 0000000..c0abbb0 --- /dev/null +++ b/srcs/utils.c @@ -0,0 +1,55 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: thrieg +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/12/13 04:41:06 by thrieg #+# #+# */ +/* Updated: 2025/12/13 06:00:35 by thrieg ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/ft_malloc.h" +#include "../libft/ft_printf/ft_printf.h" + +void print_allocs_zone(t_zone *zone) +{ + ft_printf("%s : %p\n", zone->type == E_TINY ? "TINY" : (zone->type == E_SMALL ? "SMALL" : "LARGE"), zone); + + char *zone_end = (char *)zone + zone->size; + t_header *header = (t_header *)(zone + 1); + while ((char *)header + sizeof(t_header) <= zone_end) + { + if (header->occupied) + ft_printf("%p - %p : %u bytes\n", (char *)header + sizeof(header), (char *)header + sizeof(header) + header->size, (unsigned int)header->size); + header = (t_header *)((char *)(header + 1) + header->size); + } +} + +static t_zone *min_zone_ptr(t_zone *a, t_zone *b, t_zone *c) +{ + t_zone *m = NULL; + + if (a && (!m || (uintptr_t)a < (uintptr_t)m)) m = a; + if (b && (!m || (uintptr_t)b < (uintptr_t)m)) m = b; + if (c && (!m || (uintptr_t)c < (uintptr_t)m)) m = c; + return m; +} + +void show_alloc_mem(void) +{ + t_zone *t = g_state.tiny_zone; + t_zone *s = g_state.small_zone; + t_zone *l = g_state.large_zone; + + while (t || s || l) + { + t_zone *m = min_zone_ptr(t, s, l); + print_allocs_zone(m); + + if (m == t) t = t->next; + else if (m == s) s = s->next; + else l = l->next; + } +} \ No newline at end of file