Expand description
A size-classed large object allocator backed by anonymous mappings.
This library contains types to allocate memory outside the heap, supporting power-of-two object sizes. Each size class has its own memory pool.
Allocations use MAP_ANONYMOUS with MADV_HUGEPAGE hints to benefit
from transparent huge pages when available.
§Safety
This library is very unsafe on account of unsafe and interacting directly
with libc, including Linux extension.
The library relies on anonymous memory mappings. Users must not fork the process because otherwise two processes would share the same mappings, causing undefined behavior because the mutable pointers would not be unique anymore. Unfortunately, there is no way to tell the memory subsystem that the shared mappings must not be inherited.
Clients must not lock pages (mlock), or need to unlock the pages before returning them
to lgalloc.
Structs§
- Background
Worker Config - Configuration for lgalloc’s background worker.
- Handle
- Handle to describe allocations.
- LgAlloc
- Lgalloc configuration
- LgAlloc
Stats - Statistics about lgalloc’s internal behavior.
- Size
Class Stats - Statistics per size class.
Enums§
- Alloc
Error - Allocation errors
- Prefetch
Error - Errors from
Handle::prefetch.
Constants§
- VALID_
SIZE_ CLASS - Range of valid size classes.
Functions§
- allocate
- Allocate a memory area suitable to hold
capacityconsecutive elements ofT. - deallocate
- Free the memory referenced by
handle, which has been obtained fromallocate. - lgalloc_
set_ config - Set or update the configuration for lgalloc.
- lgalloc_
stats - Determine global statistics per size class.