1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
// // Copyright 2017 yvt, all rights reserved. // // Licensed under the MIT license <LICENSE-MIT or // http://opensource.org/licenses/MIT>. This file may // not be copied, modified,or distributed except // according to those terms. // //! Dynamic suballocators for external memory (e.g., Vulkan device memory). //! //! # Provided Algorithms //! //! | Name | Time Complexity | Space Complexity | //! | ------------------------------- | --------------- | ---------------- | //! | TLSF (Two-Level Segregated Fit) | `O(1)` | `O(N)` | //! | Free space bitmap | `O(size)` | `O(size)` | //! //! (`size`: heap size measured by the number of allocation units, `N`: number of allocations) //! //! # Examples //! //! ``` //! let mut tlsf = xalloc::SysTlsf::new(8u32); //! //! // Allocate regions //! let (region1, offset1) = tlsf.alloc(4).unwrap(); //! let (region2, offset2) = tlsf.alloc(4).unwrap(); //! 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. //! #![cfg_attr(feature = "nightly", feature(nonzero))] pub extern crate num_traits; pub extern crate num_integer; pub mod arena; pub mod bitmap; mod bitmaputils; pub mod tlsf; pub mod int; pub use self::tlsf::{Tlsf, SafeTlsf, SysTlsf, TlsfBlock, TlsfRegion}; pub use self::bitmap::{BitmapAlloc, BitmapAllocRegion};