/** * @file malloc.c * @brief malloc implementation. */ #include "malloc.h" #include "malloc_internal.h" t_heap g_heap = { 0 }; void * malloc (size_t size) { t_zone **zone_list; t_zone *zone; t_chunk *chunk; size_t alloc_max; if (size == 0) size = 1; if (size <= TINY_MAX) { zone_list = &g_heap.tiny; alloc_max = TINY_MAX; } else if (size <= SMALL_MAX) { zone_list = &g_heap.small; alloc_max = SMALL_MAX; } else { zone_list = &g_heap.large; alloc_max = size; } if (*zone_list == NULL) { zone = zone_new (alloc_max); if (zone == NULL) return (NULL); *zone_list = zone; } else zone = *zone_list; chunk = (t_chunk *)((char *)zone + ALIGN (sizeof (t_zone))); chunk->is_free = 0; return ((char *)chunk + ALIGN (sizeof (t_chunk))); }