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 数据结构
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
将表现得很好。