From 8849d801b9d3767390e3e1ed6b562db738ac1bcb Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Fri, 27 Feb 2026 11:04:07 +0100 Subject: Add show_alloc_mem and test_show, rename test to test_preload Implement show_alloc_mem() to print all zones and allocations by ascending address. Add test_show binary that links directly against libft_malloc.so to exercise it. --- src/show_alloc_mem.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/show_alloc_mem.c (limited to 'src/show_alloc_mem.c') diff --git a/src/show_alloc_mem.c b/src/show_alloc_mem.c new file mode 100644 index 0000000..6fd5e37 --- /dev/null +++ b/src/show_alloc_mem.c @@ -0,0 +1,87 @@ +/** + * @file show_alloc_mem.c + * @brief Print every allocated zone and block to stdout. + */ + +#include "libft.h" +#include "malloc.h" +#include "malloc_internal.h" + +static void +_s_put_ptr (void *ptr) +{ + const char hex[] = "0123456789abcdef"; + char buf[20]; + unsigned long value; + int i; + + value = (unsigned long)ptr; + i = (int)sizeof (buf); + while (value) + { + buf[--i] = hex[value % 16]; + value /= 16; + } + buf[--i] = 'x'; + buf[--i] = '0'; + ft_putstr_fd (buf + i, 1); +} + +static void +_s_put_size (size_t n) +{ + if (n >= 10) + _s_put_size (n / 10); + ft_putchar_fd ('0' + (n % 10), 1); +} + +static size_t +_s_print_zone (char *label, t_zone *zone) +{ + t_chunk *chunk; + void *start; + void *end; + size_t total; + + total = 0; + while (zone) + { + ft_putstr_fd (label, 1); + ft_putstr_fd (" : ", 1); + _s_put_ptr (zone); + ft_putchar_fd ('\n', 1); + chunk = (t_chunk *)((char *)zone + ALIGN (sizeof (t_zone))); + while (chunk) + { + if (!chunk->is_free) + { + start = (char *)chunk + ALIGN (sizeof (t_chunk)); + end = (char *)start + chunk->size; + _s_put_ptr (start); + ft_putstr_fd (" - ", 1); + _s_put_ptr (end); + ft_putstr_fd (" : ", 1); + _s_put_size (chunk->size); + ft_putendl_fd (" bytes", 1); + total += chunk->size; + } + chunk = chunk->next; + } + zone = zone->next; + } + return (total); +} + +void +show_alloc_mem (void) +{ + size_t total; + + total = 0; + total += _s_print_zone ("TINY", g_heap.tiny); + total += _s_print_zone ("SMALL", g_heap.small); + total += _s_print_zone ("LARGE", g_heap.large); + ft_putstr_fd ("Total : ", 1); + _s_put_size (total); + ft_putendl_fd (" bytes", 1); +} -- cgit v1.2.3