#segment #memory #vec #data-structures #size #chunks #allocate

segvec

SegVec 数据结构用于 Rust。类似于 Vec,但以递增大小的块分配内存

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内存管理

Download history 93/week @ 2024-04-07 63/week @ 2024-04-14 26/week @ 2024-04-21 122/week @ 2024-04-28 33/week @ 2024-05-05 35/week @ 2024-05-12 33/week @ 2024-05-19 36/week @ 2024-05-26 61/week @ 2024-06-02 11/week @ 2024-06-09 18/week @ 2024-06-16 6/week @ 2024-06-23 70/week @ 2024-06-30 16/week @ 2024-07-07 28/week @ 2024-07-14 22/week @ 2024-07-21

136 每月下载量
用于 2 个 Crates(通过 mbroker

MIT 许可证

93KB
2K SLoC

segvec

docs.rs crates.io

此包提供 SegVec 数据结构。

它类似于 Vec,但以递增大小的“段”分配内存。这涉及到一些权衡

优点

  • 即使在 push 操作期间 SegVec 必须增长,元素地址在整个操作过程中保持稳定。
  • 调整大小只分配所需额外的空间,不需要复制。

缺点

  • 操作速度较慢(一些,如 insertremovedrain,要慢得多),对于 SegVec 而言,比 Vec 要慢(多个指针解引用,将索引映射到 (, 偏移) 对)
  • 直接切片不可用(即没有 &[T]&mut [T]),尽管 sliceslice_mut 是可用的

用例

  1. 您有一个生命周期长的 Vec,其大小在整个程序的生命周期中在非常小和非常大之间波动。
  2. 您有一个大的只追加 Vec,并且会从对元素的稳定引用中受益

功能

  • small-vec - 使用 SmallVec 代替 Vec 来存储段列表,使得前几个段头可以在栈上运行。可以加快对小型 SegVec 值的访问。
  • thin-segments - 使用 ThinVec 代替 Vec 来存储每个段的数据,这意味着每个段头只占用单个 usize 的空间,而不是使用 Vec 时的 3 个。

许可证:MIT

依赖项

~175–305KB