StackThreads/MP: version 0.77 User's Guide
#include <st_mm.h> @ void * MM_ALLOC(sz); @ void MM_FREE(ptr); @ void MM_ZERO_CLEAR(ptr, sz); @ void MM_GC_POINT(); @ void MM_SETUP(fd);
They are macros whose behavior change according to the following parameter.
#define UNDERLYING_MM ...
It chooses the basic memory allocator and can be selected from the following values:
UNDERLYING_MM_SGC_AUTO_GC @ UNDERLYING_MM_SGC_EXP_GC @ UNDERLYING_MM_SGC_EXP_FREE @ UNDERLYING_MM_MALLOC
UNDERLYING_MM_SGC_AUTO_GC
uses SGC and relies on its automatic
memory management. UNDERLYING_MM_SGC_EXP_GC
uses SGC, but
triggers GC only when explicitly requested by
MM_GC_POINT()
. UNDERLYING_MM_SGC_EXP_FREE
uses SGC, but
never frees objects by GC. Finally, UNDERLYING_MM_MALLOC
uses the
system's default malloc
.
MM_ALLOC
calls the appropriate allocator. MM_FREE(ptr)
frees object pointed to by ptr when
UNDERLYING_MM_SGC_EXP_FREE
or UNDERLYING_MM_MALLOC
is
given, and otherwise has no effects. MM_ZERO_CLEAR(ptr, sz)
clears a block of sz bytes from ptr, only when
MM_ALLOC
does not zero-fill allocated memory. Whenever you need
to zero-clear allocated memory, use MM_ZERO_CLEAR
instead of
bzero
, to avoid duplication of work in case MM_ALLOC
already does it. MM_GC_POINT()
invokes a GC when
UNDERLYING_MM_SGC_EXP_GC
is given, and has no effects
otherwise. MM_SETUP(fd)
sets GC_dont_gc
parameter
appropriately when a UNDERLYING_MM_SGC_xxx
is given. It also sets
GC_free_space_divisor
to fd.