Skip to content

Slab allocator

include/mem/slab.h View source View on GitHub
struct slab_elcm_candidate (3 fields) source
§ size_t pages
§ size_t bitmap_size_bytes
§ size_t obj_count
struct slab_size_constant (5 fields) source

provides the ability for different subsystems to be able to make a constant slab size so frequently allocated objects can waste a little less memory

§ const char *name
§ size_t size
§ size_t align
§ struct list_node list
§ struct internal
§ struct slab_elcm_candidate cand
void slab_allocator_init(void)
source
void slab_domain_init(void)
source
void slab_domains_print(void)
source
void slab_domain_init_late(void)
source
bool slab_domain_busy(struct slab_domain *domain)
source
#define SLAB_SIZE_REGISTER(n, s, a)
source
Expansion
#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_NODE_INIT(slab_size_constant_##n.list), \
        .internal = {{0}}, \
    }
#define SLAB_SIZE_REGISTER_FOR_STRUCT(sname, al)
source

convenience wrapper

Expansion
#define SLAB_SIZE_REGISTER_FOR_STRUCT(sname, al) \
    SLAB_SIZE_REGISTER(sname, sizeof(struct sname), al)
#define SLAB_OBJ_ALIGN_DEFAULT 8u
source
#define SLAB_FREE_POISON_BYTE 0x67
source
#define SLAB_ALLOC_NONZERO_POISON_BYTE 0x42
source