Expand description
Dynamic suballocators for external memory (e.g., Vulkan device memory).
§Provided Algorithms
§Generic
Name | Time Complexity | Space Complexity |
---|---|---|
TLSF (Two-Level Segregated Fit) | O(1) | O(N + log size) |
Free space bitmap | O(size) | O(size) |
§Specialized
Name | Time Complexity | Space Complexity |
---|---|---|
Ring buffer | O(1) | O(N) |
(size
: heap size measured by the number of allocation units, N
: number of allocations)
§Examples
use xalloc::{SysTlsf, SysTlsfRegion};
let mut tlsf = xalloc::SysTlsf::new(8u32);
// Allocate regions
let alloc1: (SysTlsfRegion, u32) = tlsf.alloc(4).unwrap();
let alloc2: (SysTlsfRegion, u32) = tlsf.alloc(4).unwrap();
let (region1, offset1) = alloc1;
let (region2, offset2) = alloc2;
println!("allocated #1: {:?}", (®ion1, offset1));
println!("allocated #2: {:?}", (®ion2, offset2));
// Deallocate a region
tlsf.dealloc(region1).unwrap();
// Now we can allocate again
tlsf.alloc(2).unwrap();
tlsf.alloc(2).unwrap();
§Feature Flags
nightly
— Enables optimizations which currently require a Nightly Rust compiler. This flag is now unused due to the stabilization ofNonNull
in Rust 1.25.
Re-exports§
pub extern crate num;
pub use self::bitmap::BitmapAlloc;
pub use self::bitmap::BitmapAllocRegion;
pub use self::ring::Ring;
pub use self::ring::RingRegion;
pub use self::tlsf::SafeTlsf;
pub use self::tlsf::SafeTlsfRegion;
pub use self::tlsf::SysTlsf;
pub use self::tlsf::SysTlsfRegion;
pub use self::tlsf::Tlsf;
pub use self::tlsf::TlsfBlock;
pub use self::tlsf::TlsfRegion;
Modules§
- arena
- Memory arena traits (used by
Tlsf
). - bitmap
- Free space bitmap-based external memory allocator.
- int
- Traits for integral types.
- ring
- A dynamic external memory allocator implementing the functionality of a circular buffer.
- tlsf
- A dynamic external memory allocator based on the TLSF (Two-Level Segregated Fit) algorithm.