File syn_slab.h¶
File List > src > syntropic > util > syn_slab.h
Go to the documentation of this file
#ifndef SYN_SLAB_H
#define SYN_SLAB_H
#include "../common/syn_defs.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SYN_SLAB_MAX_CLASSES 8U
typedef struct {
size_t block_size;
size_t total_blocks;
size_t free_count;
uint8_t *start_ptr;
void *freelist;
} SYN_SlabClass;
typedef struct {
uint8_t *backing_memory;
size_t total_memory_size;
SYN_SlabClass classes[SYN_SLAB_MAX_CLASSES];
size_t num_classes;
} SYN_SlabAllocator;
typedef struct {
size_t total_bytes;
size_t allocated_bytes;
size_t total_allocs;
} SYN_SlabStats;
SYN_Status syn_slab_init(SYN_SlabAllocator *slab, void *backing_memory, size_t total_size,
const size_t *block_sizes, const size_t *blocks_per_class,
size_t num_classes);
void *syn_slab_alloc(SYN_SlabAllocator *slab, size_t size);
SYN_Status syn_slab_free(SYN_SlabAllocator *slab, void *ptr);
SYN_Status syn_slab_get_stats(const SYN_SlabAllocator *slab, SYN_SlabStats *stats);
#ifdef __cplusplus
}
#endif
#endif /* SYN_SLAB_H */