30 lines
910 B
C
30 lines
910 B
C
#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();
|
|
}
|
|
|