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 数据结构

Download history 306/week @ 2024-03-13 232/week @ 2024-03-20 322/week @ 2024-03-27 300/week @ 2024-04-03 501/week @ 2024-04-10 518/week @ 2024-04-17 508/week @ 2024-04-24 74/week @ 2024-05-01 423/week @ 2024-05-08 392/week @ 2024-05-15 285/week @ 2024-05-22 397/week @ 2024-05-29 335/week @ 2024-06-05 452/week @ 2024-06-12 499/week @ 2024-06-19 491/week @ 2024-06-26

1,829 monthly downloads
3 crates 中使用

BSL-1.0 许可证

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支持超过对齐。

MiniVecVec上实现了以下仅在Nightly中存在的关联函数的稳定版本

MiniVec有以下关联函数,这些函数在Vec中找不到

MiniVec有以下对现有Vec API的扩展

  • push返回对新创建元素的可变引用

未来的 TODO

  • 一旦稳定,添加try_reserve方法
  • 一旦稳定,添加对关联函数(如FromIterator)的各种特殊化
  • 一旦稳定,添加分配器支持

依赖关系

~175KB