TLSF memory allocator
npm install wlib-tlsfTwo-level segregated-fit memory allocator package for WLib. Allocator created by Matthew Conte.
Modified API for WLib.
The documentation is a little lacking on initialization but you essentially
pass a memory pool for TLSF to manage.
``c++
enum { STATIC_POOL_SIZE = 1 << 20 };
static char s_pool[STATIC_POOL_SIZE];
tlsf_t instance = tlsf_create_with_pool(s_pool, STATIC_POOL_SIZE);
void *data = tlsf_malloc(instance, 64);
tlsf_free(instance, data);
`
#### WLIB_TLSF_LOG2_DIV
Log of the number of subdivisions within a size class. Larger values
introduce more overhead to the TLSF structure but reduce fragmentation.
Values should be at least 2. Typical values up to 5.
#### WLIB_TLSF_LOG2_ALIGN
Log of the alignment of memory and blocks. E.g. a value of 2 aligns to
4 bytes. The alignment must be at least the architecture alignment;
that is, 2 bytes for 16-bit, 4 bytes for 32-bit, and 8 bytes for 64-bit.
Larger values may be used to align to page boundaries.
#### WLIB_TLSF_LOG2_MAX
Log of the maximum possible allocation size. This value directly affects
the maximum pool size that can be managed by TLSF. Increasing it,
however, will increase overhead.
#### Specify Architecture
One of WLIB_TLSF_16BIT, WLIB_TLSF_32BIT, or WLIB_TLSF_64BIT must
be specified to select the architecture. TLSF attempts to dectect the
specific architecture to use builtins, but these can be specified as
- WLIB_TLSF_ARMWLIB_TLSF_GHS
- WLIB_TLSF_GNU
- WLIB_TLSF_MSC
- WLIB_TLSF_PPC
- WLIB_TLSF_SNC
-
If none is specified or autodetection fails, TLSF falls back to a
generic implementation of CLZ.
specifies the amount of printing and
run-time assertions. A value of 0 turns all off, a value of 1 will
print errors and run asserts, and a value of 2 will print some
verbose output.Custom assert and print handlers can be implemented by defining
WLIB_TLSF_ASSERT and WLIB_TLSF_PRINTF and then providing the functions`c
void tlsf_printf(const char *fmt, ...)
{ / ... / }void tlsf_assert(bool expr, const char *msg)
{ / ... / }
`Usage on AVR
Recommended settings are`yaml
pkg_compile_flags:
- -DWLIB_TLSF_16BIT
- -DWLIB_TLSF_LOG2_DIV=2
- -DWLIB_TLSF_LOG2_ALIGN=1
- -DWLIB_TLSF_LOG2_MAX=10
- -DWLIB_TLSF_PRINTF
- -DWLIB_TLSF_ASSERT
``For boards will limited RAM.