fixed-typed-arena

An arena that allocates values of a single type (similar to [typed-arena]) using chunks of memory that have a configurable fixed size. This enables it to perform allocations in non-amortized O(1) (constant) time.

Other arena implementations, like [typed-arena], are optimized for throughput: they allocate chunks of memory with exponentially increasing sizes, which results in amortized constant-time allocations.

fixed-typed-arena is optimized for latency: it allocates chunks of memory with a fixed, configurable size, and individual value allocations are performed in non-amortized constant time.

This crate depends only on [core] and [alloc], so it can be used in no_std environments that support [alloc].

Example

```rust use fixedtypedarena::Arena; struct Item(u64);

let arena = Arena::<_, 128>::new(); let item1 = arena.alloc(Item(1)); let item2 = arena.alloc(Item(2)); item1.0 += item2.0;

asserteq!(item1.0, 3); asserteq!(item2.0, 2); ```

References

Items allocated by an [Arena] can contain references to other items in the same arena, but the crate feature dropck_eyepatch must be enabled (which requires Rust nightly), as fixed-typed-arena must use the unstable feature of the same name.

Alternatively, you may be able to use a [ManuallyDropArena] instead.

ManuallyDropArena

This crate also provides [ManuallyDropArena], a type like [Arena] that returns references of any lifetime, including 'static. The advantage of this type is that it can be used without being borrowed, but it comes with the tradeoff that it will leak memory unless the unsafe [drop] method is called.