#ifndef JOVE_MEMORY_SLAB_H #define JOVE_MEMORY_SLAB_H 1 #include #include #include #define SLABCACHE_NAME_LIMIT 32 typedef struct slab_cache { char name[SLABCACHE_NAME_LIMIT]; struct slab *list_free; struct slab *list_partial; struct slab *list_full; size_t obj_count; size_t obj_size; size_t obj_capacity; size_t slab_pages; } slab_cache_t; typedef struct slab { struct slab *prev; struct slab *next; void *slab_base; void *obj_base; size_t free_count; int free_index; uintptr_t free[]; } slab_t; void slabcache_new(slab_cache_t *cache, char *name, size_t objsize); void* slab_alloc(slab_cache_t *cache); void slab_free(slab_cache_t *cache, void *ptr); void* slab_get(slab_cache_t *cache, size_t index); void slab_set(slab_cache_t *cache, size_t index, void *data); #endif