13. SNC (Stack No Checking)¶
Deprecated
starting with version 1.111.
If you need special handling of stack-like allocation, contact us.
SNC is a manually managed pool class that supports a stack-like protocol for allocation and deallocation using allocation frames on allocation points. See Allocation frames.
If mps_ap_frame_pop()
is used on an allocation point in an SNC
pool (after a corresponding call to mps_ap_frame_push()
), then
the objects affected by the pop are effectively declared dead, and may
be reclaimed by the collector. Extant references to such objects from
reachable or de facto alive objects are safe, but such other objects
should be dead; that is, such references must never be used.
13.1. SNC properties¶
Does not support allocation via
mps_alloc()
.Supports allocation via allocation points only. If an allocation point is created in an SNC pool, the call to
mps_ap_create_k()
requires one keyword argument,MPS_KEY_RANK
.Does not support deallocation via
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 contain ambiguous references or weak references (1), and may not use remote 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.
Blocks may only be referenced by base pointers.
Blocks are not protected by barriers (1).
Blocks do not move.
Blocks may not be registered for finalization.
Blocks must belong to an object format which provides scan, skip, and padding methods.
Blocks must not have in-band headers.
13.2. SNC introspection¶
#include "mpscsnc.h"
-
mps_class_t
mps_class_snc
(void)¶ Return the pool class for an SNC (Stack No Check) pool.
When creating an SNC pool,
mps_pool_create_k()
requires one keyword argument:MPS_KEY_FORMAT
(typemps_fmt_t
) specifies the object format for the objects allocated in the pool. The format must provide a scan method, a skip method, and a padding method.
For example:
MPS_ARGS_BEGIN(args) { MPS_ARGS_ADD(args, MPS_KEY_FORMAT, fmt); res = mps_pool_create_k(&pool, arena, mps_class_snc(), args); } MPS_ARGS_END(args);
Deprecated
starting with version 1.112.
When using
mps_pool_create()
, pass the format like this:mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, mps_class_t mps_class_snc(), mps_fmt_t fmt)
When creating an allocation point on an SNC pool,
mps_ap_create_k()
requires one keyword argument:MPS_KEY_RANK
(typemps_rank_t
) specifies the rank of references in objects allocated on this allocation point. It must bemps_rank_exact()
.
For example:
MPS_ARGS_BEGIN(args) { MPS_ARGS_ADD(args, MPS_KEY_RANK, mps_rank_exact()); res = mps_ap_create_k(&ap, awl_pool, args); } MPS_ARGS_END(args);
Deprecated
starting with version 1.112.
When using
mps_ap_create()
, pass the rank like this:mps_res_t mps_ap_create(mps_ap_t *ap_o, mps_pool_t pool, mps_rank_t rank)