7 个版本 (4 个破坏性更新)

0.5.0 2022年1月22日
0.4.0 2021年12月31日
0.3.0 2021年12月28日
0.2.1 2021年9月5日
0.1.1 2021年8月28日

#1783 in 数据结构

Download history 28/week @ 2024-03-31 1/week @ 2024-04-07 1/week @ 2024-05-19 41/week @ 2024-06-02 58/week @ 2024-06-09 46/week @ 2024-06-16 4/week @ 2024-06-23

每月下载量:149
3 crates 中使用

MIT 许可证

24KB
632 代码行

local_vec

一个 固定容量 向量,其元素存储在本地。特别是,它们可以在 上分配。

License: MIT Build Status


LocalVec 是一个 固定容量 向量,即其 大小长度 随着向量和从向量中弹出元素而增加和减少。但是,其 容量 始终保持不变,必须在 编译时 确定。

LocalVec 的元素存储在 LocalVec 本身的 本地缓冲区 中,而不是在堆上分配的 远程缓冲区 中。


LocalVec Vec

LocalVec 的元素位于本地,即在其内部

use local_vec::LocalVec;
let mut vec = LocalVec::<_, 4>::new();
vec.push(3);
vec.push(7);

vec 中的内容如上所示

即,vec 有一个 本地缓冲区i3237 存储在 vec 本身中,而不是在堆上分配的 远程 缓冲区中。

相比之下,Vec 在堆上分配一个 远程 缓冲区,并包含对该缓冲区的指针,而不是缓冲区本身

let mut v = Vec::with_capacity(4);
v.extend([3, 7]);

即,v 指向一个 远程缓冲区i3237 存储在那个远程缓冲区上,该缓冲区是在堆上分配的。

编译时容量

由于 LocalValue 的大小取决于其容量,因此必须在使用 LocalVec 时在编译时确定其容量。这通过使用 const generics 的常量泛型参数来实现

let mut vec = LocalVec::<i32, 4>::new();
                              |
    const generic argument <--|

在栈或堆上分配

从技术角度讲,元素LocalVec存储在LocalVec中是本地的。这些元素是否在栈上,取决于LocalVec本身是否在栈上分配。例如

let vec = Box::new(LocalVec::<u8, 32>::new());

vec是在堆上分配的,它包含的元素也是如此,因为它们存储在vec内部。不过,与Vec相比,这里没有额外的堆分配。

无运行时依赖