[−][src]Crate xalloc
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 |
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[^1]. |