#slice #interning #binary #pool #bin #optimization #backing

bin-pool

一个用于内部化二进制切片的小型库

2 个版本

0.1.1 2023年8月27日
0.1.0 2022年7月28日

#2551Rust 模式


用于 netsblox-vm

MIT/Apache

19KB
289

bin-pool 是一个用于内部化二进制切片的小型库。它提供了一个名为 BinPool 的类型,表示一组二进制切片;然而,内容通过允许切片在内存中重叠来高度优化空间。数据由先前添加的较小子集的“大型”切片支持。

请注意,内部化操作并不便宜,在最坏的情况下,在添加新切片时必须检查每个支持切片。仅在内存非常有限或对时间不敏感的区域进行存储优化时(例如,编译器输出)才建议使用内部化。

示例

let mut b = BinPool::new();

b.add(b"hello world".as_slice());  // add first slice - backed by itself
b.add(b"hello".as_slice());        // add another slice - backed by first
b.add(b"world".as_slice());        // add another slice - backed by first
assert_eq!(b.bytes(), 21);         // 21 bytes stored
assert_eq!(b.backing_bytes(), 11); // but only 11 bytes needed to represent them

b.add(b"hello world!".as_slice()); // add another slice - becomes the backer for others
assert_eq!(b.bytes(), 33);         // now 33 bytes stored
assert_eq!(b.backing_bytes(), 12); // but only 12 bytes to represent them

no_std

bin-pool 通过禁用默认功能支持在 no_std 环境中构建。请注意,需要 alloc 库。

[dependencies]
bin-pool = { version = "...", default-features = false }

无运行时依赖