7 个版本
0.2.0 | 2023年7月31日 |
---|---|
0.1.5 | 2022年1月17日 |
0.1.3 | 2021年7月7日 |
0.1.1 | 2021年6月30日 |
#268 在 内存管理
136 每月下载量
用于 2 个 Crates(通过 mbroker)
93KB
2K SLoC
segvec
此包提供 SegVec
数据结构。
它类似于 Vec
,但以递增大小的“段”分配内存。这涉及到一些权衡
优点
- 即使在
push
操作期间SegVec
必须增长,元素地址在整个操作过程中保持稳定。 - 调整大小只分配所需额外的空间,不需要复制。
缺点
- 操作速度较慢(一些,如
insert
、remove
和drain
,要慢得多),对于SegVec
而言,比Vec
要慢(多个指针解引用,将索引映射到(段, 偏移)
对) - 直接切片不可用(即没有
&[T]
或&mut [T]
),尽管slice
和slice_mut
是可用的
用例
- 您有一个生命周期长的
Vec
,其大小在整个程序的生命周期中在非常小和非常大之间波动。 - 您有一个大的只追加
Vec
,并且会从对元素的稳定引用中受益
功能
small-vec
- 使用SmallVec
代替Vec
来存储段列表,使得前几个段头可以在栈上运行。可以加快对小型SegVec
值的访问。thin-segments
- 使用ThinVec
代替Vec
来存储每个段的数据,这意味着每个段头只占用单个usize
的空间,而不是使用Vec
时的 3 个。
许可证:MIT
依赖项
~175–305KB