C+
Packages · View as Markdown

static-arena

A bump-pointer arena whose buffer lives entirely on the stack (or in static storage). Zero malloc, zero free, so it composes with the #[no_alloc] real-time contract.

Because C+ does not yet have const-generic struct parameters, it ships two fixed shapes with an identical surface: StaticArena16K (16 KiB) and StaticArena64K (64 KiB). The alignment and zeroing overloads are folded into one signature with default-valued labeled parameters — alloc_bytes(count, aligned_to: usize = 8, zeroed: bool = false) — alongside alloc[T] for a single Copy value, alloc_str, reset, and the capacity / used / remaining accessors.

import "static-arena/static-arena" as sa;
import "stdlib/option" as option;

var a: sa::StaticArena16K = sa::StaticArena16K::new();
guard let option::Option[*u8]::Some(p) = a.alloc_bytes(64 as usize, aligned_to: 8 as usize) else {
    return 1;   // OOM
};
// ... use p ...
a.reset();      // recover full capacity, reuse

The stack size ceiling is roughly 128 KiB; for larger arenas, allocate in static and reference by pointer, or use the heap-backed arena.