|
jam 0.0.1
A compacting generational garbage collector for C++26
|
| Njam | |
| Nunits | |
| Cspace | A count of storage units; Ratio measures one unit in bytes. Integer arithmetic and conversions terminate on overflow. Floating arithmetic follows its representation. Like chrono, integral destinations accept only lossless unit conversions implicitly; use space_cast, floor, ceil or round otherwise. There is no implicit conversion to an untyped count |
| Cgeneration_options | Sizing policy for one generation. Sizes are platform pages |
| Cheap | A circular, double-mapped arena with bounded parallel compaction.Compressed four-byte offsets address two generations of up to 16 GiB each. The high bit selects young; the remaining bits count eight-byte cells. Record alignment up to 64 bytes is retained by dilation and padding between independent rank blocks. Allocation and liveness always use eight-byte cells. Clients trace complete byte-relocatable records; the heap does not infer boundaries or run destructors. This storage contract extends beyond ISO C++ trivial-copy guarantees: moving representation bytes must preserve meaning after ptr fields are forwarded. Raw address-dependent state and required destruction are unsupported. Multiple markers may trace a frozen heap. Join them before compaction, mutation, allocation, or inspecting metadata. Borrows expire on movement |
| Croot_handle | A four-byte handle to a collector-updated external root slot.Copies share a registration; moves leave the source detached and null. Operations on registered handles require the owning heap current and a quiescent collector. The heap must outlive all its registered handles |
| Cvisitor | One marker's claim and edge-discovery interface.Only a successful claimant visits the record's fields. The visitor is borrowed for one callback and must not escape it |
| Cgeneration | One generation's ordered double-mapped arena and collection metadata |
| Chost | Borrow a heap whose roots, barriers and reference policy belong to a host runtime |
| Cheap_options | Two generations and one shared worker pool |
| Cheap_scope | Bind an existing heap, restoring the previous binding on scope exit.The heap must outlive the scope. Scopes nest on one thread and may re-enter a heap. They neither own the heap nor synchronize access to it |
| Cleaf | A value with no outgoing managed references.Specializing tracer<T> by deriving from leaf<T> explicitly suppresses traversal. Heap storage requirements are separate from this reference-free promise |
| Cptr | A typed heap offset, with no root registration or ownership |
| Croot | A copyable external root, updated during collection.Four-byte slot index; no heap or registration address is stored. The heap must outlive the root and be current for operations and destruction |
| Ctracer | Per-value tracing customization; values without a hook or manifest are leaves.An allocation-only claim_and_trace hook does not describe embedded fields. Scalars and ordinary records without a trace member or manifest contain no managed edges by convention. Records containing managed pointers must enumerate them in a manifest, trace member or tracer specialization. Trivial copyability does not enumerate fields |
| Ctracer< native::simd< ptr< T >, N, A > > | Trace actual pointer lanes, including null fields, in register order |
| Ctracer< native::wide< V, K > > | Trace each register's fields in the enclosing allocation |
| Ctracer< ptr< T > > | Tag a reference slot and enqueue its target |
| Ctracer< std::array< T, N > > | Visit each array element in the enclosing allocation |
| Ctracer< std::tuple< Ts... > > | Visit each tuple element in the enclosing allocation |
| Ctracer< std::variant< Ts... > > | Visit only the active variant alternative in the enclosing allocation |
| Ctracer< T > | Forward a value hook or a cooperative allocation hook.Visit each live ptr by reference from the supplied value. Nested values share the enclosing allocation's pointer mask. Static trace(visit, ptr<T>) owns allocation claiming and may walk directly between records |
| Ctracer< weak_ptr< T > > | Declare a weak field for forwarding without following its target |
| Cweak | An external conditional weak-value handle; registration survives dropped handles.Keep this handle outside the managed heap. Copies share one registration. Finalization expires all copies before the callback runs; resurrection does not rearm it |
| Cweak_ptr | A four-byte weak heap field; tracing updates its slot without retaining its target.Construct from a ptr or root. Collection clears the field when its target is unclaimed; minor collection leaves old targets alone. Use lock() to retain a target across collection. There is no control block or external registration: stack copies expire at collection just like ptr, even if the target survives. The field must be listed in its owner's manifest or trace hook |
| Cweak_root | An external weak slot, updated or cleared by collection without retaining its target.Keep it outside the managed heap. The heap must outlive even an expired attached root. Copies share a registration; moves leave the source detached and expired. Four-byte slot index; operations and destruction require the owning heap current. Operations require a quiescent collector. Old targets remain live during minor collection |
| Nstd | |
| Ccommon_type< jam::units::space< R1, P1 >, jam::units::space< R2, P2 > > | Common representation and greatest common unit, as for chrono durations |