1个不稳定版本
0.1.0 | 2020年11月13日 |
---|
#122 在 #不可变
5KB
65 行
Graph Arena
高效存储不可变图数据的集合类型。避免堆簇,强制本地性并减少复制的需求。
我应该什么时候使用这个?
在递归数据结构中,经常会遇到这样的代码
struct Expression {
Add(Box<Expression>, Box<Expression>),
// ...
}
从长远来看,这种方法会遇到几个问题
- 大部分数据生活在堆上,但相关的数据不一定相邻。
- 需要大量的分配来构建这些结构。
- 克隆变得非常昂贵。
现在,我们尽可能地避免分配;alloc
是一个昂贵的操作。这就是为什么 Vec<T>
分配的内存比它(可能)使用的内存要多。所以我们每次推送更多数据时,不需要重新分配数据。
此外,我们希望相关的数据生活在附近的内存位置:现代CPU经过大量修改以利用局部性,这使得 Vec<T>
变得非常快的数据结构!