MFS is an manually managed pool class for small objects of fixed size.
Unlike other manual pool classes, it is not subject to internal fragmentation.
The implementation is very simple: unlike other pool classes which store their control structures separately from the allocated blocks, MFS maintains a stack of free blocks using a pointer in the free block. mps_alloc() pops this stack and mps_free() pushes it.
#include "mpscmfs.h"
Return the pool class for an MFS (Manual Fixed Small) pool.
When creating an MFS pool, mps_pool_create() takes two extra arguments:
mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena,
mps_class_t mps_class_mfs(),
mps_size_t extend_size,
mps_size_t unit_size)
extend_size is the size of segment that the pool will request from the arena. It must be at least as big as unit_size. If this is not a multiple of unit_size, there will be wasted space in each segment.
unit_size is the size of blocks that will be allocated from this pool, in bytes(1). It must be at least one word.