1个不稳定版本

0.1.0 2021年1月3日

#10 in #dropped

MIT许可协议

45KB
757 代码行(不包括注释)

FrameRing

FrameRing是一个设计用于内存效率和局部性的队列的队列。FrameRing可以用来创建循环软件,避免为临时刮擦向量进行内存分配,并支持跨多个不同向量的内存局部性。

概述

在同一个FrameRing中创建的帧共享相同的后端内存,允许创建大量临时列表而无需每次都进行内存分配。许多FrameRing操作是常数时间的,包括创建和删除帧、向可变帧追加、迭代任何帧以及任何帧中的随机访问。

FrameRing能够重新使用从删除旧帧中释放的内存,用于新帧中追加的元素。任何时间只能向最前面的帧(可变帧)追加元素,但可以从之前的帧中访问元素,直到帧本身被删除,这使得该结构非常适合存储用于模拟map reduce操作的计算的列表。

示例

let mut ring = FramedRing::<i32, Pow2Capacity>::new();
let mut frame = ring.frame();
frame.push(1);
let (frame_ro, mut frame2) = frame.next();
// frame_ro now contains [1], but frame_ro is incapable of additional pushes
// However, frame2 is now able to be appended to.
frame2.push(2);
// frame_ro can be dropped whenever without requiring frame2 to be dropped
drop(frame_ro);
// ... while still maintaining the elements in frame2
frame2.as_ref().get(0) // Returns Some(2)

许可协议

GPL v3 - 请参阅顶部src/lib.rs中的标题。

贡献

请随时以PR请求的形式提交任何更改,只要贡献在GPL v3许可协议下,并且没有附加条款。

无运行时依赖