single: SNC pool class single: pool class; SNC
SNC is a manually managed <manual memory management>
pool class
that supports a stack-like protocol for allocation and deallocation using allocation frames
on allocation
points
. See topic-frame
.
If :cmps_ap_frame_pop
is used on an allocation point in an SNC pool (after a corresponding call to :cmps_ap_frame_push
), then the objects affected by the pop are assumed to be dead, and are reclaimed by the collector without checking whether there are any references to them.
This pool class is intended to be used to implement stack languages like Forth and PostScript, where some objects are allocated in stack frames and are known to be dead when the stack is popped, because the language can ensure that objects that are kept alive when the stack is popped are copied to the heap.
single: SNC pool class; properties
- Does not support allocation via :c
mps_alloc
. - Supports allocation via
allocation points
only. If an allocation point is created in an SNC pool, the call to :cmps_ap_create_k
accepts one optional keyword argument, :cMPS_KEY_RANK
. - Does not support deallocation via :c
mps_free
. - Supports
allocation frames
. - Does not support
segregated allocation caches
. - Blocks may contain
exact references
to blocks in the same or other pools (but may not containambiguous references
orweak references (1)
, and may not useremote references
). - There are no garbage collections in this pool.
- Allocations may be variable in size.
- The
alignment
of blocks is configurable. - Blocks do not have
dependent objects
. - Blocks are not automatically
reclaimed
. - Blocks are
scanned <scan>
. - Blocks may only be referenced by
base pointers
. - Blocks are not protected by
barriers (1)
. - Blocks do not
move <moving garbage collector>
. - Blocks may not be registered for
finalization
. - Blocks must belong to an
object format
which providesscan <scan method>
,skip <skip method>
, andpadding <padding method>
methods. - Blocks must not have
in-band headers
.
single: SNC pool class; interface
#include "mpscsnc.h"