10 unstable releases (3 breaking)
|Sep 19, 2021
|Jul 10, 2021
|Apr 23, 2021
|Feb 22, 2021
|Sep 27, 2020
#1580 in Data structures
904 downloads per month
Used in 3 crates
std::vec::Vec is a cool class but it's just too big!
MiniVec is only the size of a pointer.
This library is dedicated to the great Glen Joseph Fernandes whose constant tutelage has been instrumental in making me the programmer that I am.
A space-optimized version of
alloc::vec::Vec that's only the size of a single pointer!
Ideal for low-level APIs where ABI calling conventions will typically require most structs be
spilled onto the stack and copied instead of being passed solely in registers.
For example, in the x64 msvc ABI:
There's a strict one-to-one correspondence between a function call's arguments and the registers used for those arguments. Any argument that doesn't fit in 8 bytes, or isn't 1, 2, 4, or 8 bytes, must be passed by reference. A single argument is never spread across multiple registers.
In addition, its single word size makes it ideal for use as a struct member where multiple
Vec as a field can balloon the size.
MiniVec is a
#[repr(transparent)] struct so its layout is that of
MiniVec aims to be API compatible with what's currently stable in the stdlib so some
Nightly features are not supported.
MiniVec also supports myriad extensions, one such being
support for over-alignment via the associated function
MiniVec has stable implementations of the following nightly-only associated functions on
MiniVec has the following associated functions not found in
MiniVec has the following extensions to the existing
pushreturns a mutable reference to the newly created element
try_reservemethods once stable
- add myriad specializations to associated functions such as
- add Allocator support once stable