#memory #vulkan #allocator #suballocator #tlsf

xalloc

外部内存的子分配器(例如,Vulkan设备内存)

9次发布

使用旧的Rust 2015

0.2.7 2020年12月9日
0.2.6 2019年2月28日
0.2.5 2018年12月5日
0.2.4 2018年11月7日
0.1.0 2017年10月27日

#278内存管理

Download history 4/week @ 2024-03-13 5/week @ 2024-03-27 10/week @ 2024-04-03 7/week @ 2024-04-24 78/week @ 2024-05-01 13/week @ 2024-05-08 22/week @ 2024-05-15 89/week @ 2024-05-22 145/week @ 2024-05-29 130/week @ 2024-06-05 89/week @ 2024-06-12 156/week @ 2024-06-19 110/week @ 2024-06-26

505 每月下载次数
用于 phosphor

MIT 许可证

93KB
2K SLoC

xalloc

docs.rs

外部内存的动态子分配器(例如,Vulkan设备内存)。

提供的算法

通用

名称 时间复杂度 空间复杂度
TLSF(二级分割适应) O(1) O(N+对数大小)
空闲空间位图 O(大小) O(大小)

专用

名称 时间复杂度 空间复杂度
环形缓冲区 O(1) O(N)

(size: 通过分配单元数量测量的堆大小,N: 分配次数)

示例

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: {:?}", (&region1, offset1));
println!("allocated #2: {:?}", (&region2, offset2));

// Deallocate a region
tlsf.dealloc(region1).unwrap();

// Now we can allocate again
tlsf.alloc(2).unwrap();
tlsf.alloc(2).unwrap();

特性标志

  • nightly — 启用目前需要Nightly Rust编译器的优化。由于在Rust 1.25中对NonNull的稳定化,此标志现在不再使用。

许可证:MIT

依赖关系

~485KB