#contiguous-memory #vec #structure #section #workload #cache

nightly vec-with-gaps

一个表现像vec的vec的数据结构,但子vec存储在内存中的一个连续部分,这提高了某些工作负载的缓存性能。

8个版本 (破坏性更新)

0.7.0 2021年10月10日
0.6.0 2021年10月5日
0.5.0 2021年9月24日
0.4.0 2021年9月21日
0.1.1 2021年8月28日

#1104 in 数据结构

MIT 许可证

59KB
1.5K SLoC

https://crates.io/crates/vec-with-gaps

VecWithGaps 是一个表现像vec的vec的数据结构,但子vec存储在内存中的一个连续部分,这提高了某些工作负载的缓存性能。

从机制上讲,它是一个有间隙的vec,未初始化值的段穿插在已初始化值的段之间,为子vec添加更多元素提供了常数时间的空间。

适用于子vec的内容随时间变化很小且经常顺序读取的情况。如果数据变化很大(除非更改始终集中在末尾),则不适用。

在mako的计算机上,一旦VecWithGaps存储了大约一百万个单词,顺序读取性能的收益就开始变得显著。如果您只存储,例如,20_000个单词,并且除非在生成数据结构时有什么东西正在破坏分配的邻近性,否则使用VecWithGaps而不是Vec<Vec<V>>的缓存收益相当微不足道。

如果经常在中间插入,则构建VecWithGaps可能会非常慢。在这种情况下,您可能最好使用Vec<Vec<V>>,然后在生成完成后通过VecWithGaps::from_vec_vec转换。如果您只是将内容推送到末尾,则VecWithGaps将表现得很好。

无运行时依赖项