#include "malloc.h" pthread_mutex_t g_malloc_mutex; t_zones g_zones; void init_tiny_zones(void) { g_zones.tiny_block_max_size = g_zones.pagesize / 2; // TODO protect mmap g_zones.tiny_zones = (t_zone *)mmap(NULL, g_zones.tiny_block_max_size * 128, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); g_zones.tiny_zones->head = NULL; g_zones.tiny_zones->next = NULL; } void init_small_zones(void) { g_zones.small_block_max_size = g_zones.tiny_block_max_size * 128; // TODO protect mmap g_zones.small_zones = (t_zone *)mmap(NULL, g_zones.small_block_max_size * 128, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); g_zones.small_zones->head = NULL; g_zones.small_zones->next = NULL; } __attribute__((constructor)) static void init_malloc(void) { g_zones.pagesize = (size_t)sysconf(_SC_PAGESIZE); g_zones.max_align = MAX_ALIGNMENT; init_tiny_zones(); init_small_zones(); }