Skip to content

Slab allocator

include/mem/slab.h View source View on GitHub
struct slab_elcm_candidate {
    size_t  pages;
    size_t  bitmap_size_bytes;
    size_t  obj_count;
};
struct slab_size_constant {
    const char        *name;
    size_t            size;
    size_t            align;
    struct list_head  list;
    struct {
        struct slab_elcm_candidate  cand;
    } internal;
};
void slab_allocator_init();
void slab_domain_init(void);
void slab_domains_print();
void slab_domain_init_late();
#define SLAB_SIZE_REGISTER(n, s, a) \
    LINKER_SECTION_OBJECT(struct slab_size_constant, slab_sizes) \
    slab_size_constant_##n = { \
        .name = #n, \
        .size = s, \
        .align = a, \
        .list = LIST_HEAD_INIT(slab_size_constant_##n.list), \
        .internal = {{0}}, \
    }
#define SLAB_SIZE_REGISTER_FOR_STRUCT(sname, al) \
    SLAB_SIZE_REGISTER(sname, sizeof(struct sname), al)
#define SLAB_OBJ_ALIGN_DEFAULT 8u