Orthotope
Orthotope is a Rust allocator library with:
Installation
Features
- a pre-mapped arena
- fixed size classes up to
16 MiB - per-thread caches
- a shared central pool
- a tracked large-allocation path
It is aimed at allocation-heavy workloads such as ML inference, tensor pipelines, batched embedding or reranking services, and other high-throughput systems.
API
use ;
let ptr = allocate?;
unsafe
# Ok::
allocate(size)returnsResult<NonNull<u8>, AllocError>deallocate(ptr)is the primary free pathdeallocate_with_size(ptr, size)validates the recorded size before freeing
Only free live pointers returned by Orthotope. Small-object double free remains undefined behavior.
For direct instance-oriented use, the crate also exposes Allocator, AllocatorConfig,
ThreadCache, and SizeClass at the crate root. Use one ThreadCache per thread when
calling Allocator::allocate_with_cache or Allocator::deallocate_with_cache directly.
Behavior
- small allocations use thread-local reuse first, then central-pool refill, then arena carving
- small-cache arena refill reserves one contiguous span and splits it locally into class-sized blocks
- frees are routed by a 64-byte allocation header
- requests above
16 MiBuse the large-allocation path - default alignment is
64bytes - custom allocator alignment must be a power of two and at least
64bytes - the global convenience API uses
AllocatorConfig::default()
Small-object provenance in v1 is limited to header validation plus an arena-range ownership check on the decoded block start. Foreign pointers are rejected where detectable, but small-object double free remains undefined behavior and same-arena pointer forgery is not guaranteed to be detected.
Large allocations are also tracked in a live registry. Duplicate large frees are rejected when the pointer still decodes to a valid large-allocation header.
Small-request classes:
1..=6465..=256257..=40964097..=262_144262_145..=1_048_5761_048_577..=16_777_216