10个不稳定版本 (3个破坏性更改)
0.4.0 | 2021年9月19日 |
---|---|
0.3.1 | 2021年7月10日 |
0.3.0 | 2021年4月23日 |
0.2.3 | 2021年2月22日 |
0.1.0 | 2020年9月27日 |
#686 in 数据结构
1,829 monthly downloads
在 3 crates 中使用
87KB
2K SLoC
MiniVec
std::vec::Vec
是一个很酷的类,但它太大!MiniVec
的大小仅相当于一个指针。
致谢
这个库献给伟大的Glen Joseph Fernandes,他的持续指导对我成为一名程序员至关重要。
lib.rs
:
一个空间优化的版本,大小仅相当于单个指针!适用于需要将大多数结构体溢出到堆栈并复制而不是仅通过寄存器传递的低级API。
例如,在 x64 msvc ABI
函数调用参数与用于这些参数的寄存器之间存在严格的一对一对应关系。任何不小于8字节或不是1、2、4或8字节的参数必须通过引用传递。单个参数永远不会分散在多个寄存器中。
此外,它单字的大小使其非常适合用作结构体成员,其中多个包含 Vec
作为字段的实例可以膨胀大小。
MiniVec
是一个 #[repr(transparent)]
结构体,因此其布局与 core::ptr::NonNull<u8>
相同。
一般来说,MiniVec
旨在与stdlib当前稳定版本兼容的API,因此不支持一些Nightly功能。MiniVec
还支持许多扩展,其中之一是通过关联函数with_alignment
支持超过对齐。
MiniVec
在Vec
上实现了以下仅在Nightly中存在的关联函数的稳定版本
MiniVec
有以下关联函数,这些函数在Vec
中找不到
MiniVec
有以下对现有Vec
API的扩展
push
返回对新创建元素的可变引用
未来的 TODO
- 一旦稳定,添加
try_reserve
方法 - 一旦稳定,添加对关联函数(如
FromIterator
)的各种特殊化 - 一旦稳定,添加分配器支持
依赖关系
~175KB