Skip to content

Latest commit

 

History

History
126 lines (82 loc) · 3.79 KB

snc.rst

File metadata and controls

126 lines (82 loc) · 3.79 KB

single: SNC pool class single: pool class; SNC

SNC (Stack No Checking)

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

SNC properties

  • Does not support allocation via :cmps_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 :cmps_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 <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 provides scan <scan method>, skip <skip method>, and padding <padding method> methods.
  • Blocks must not have in-band headers.

single: SNC pool class; interface

SNC interface

#include "mpscsnc.h"