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.