# Crate smallvec [−] [src]

Small vectors in various sizes. These store a certain number of elements inline, and fall back to the heap for larger allocations. This can be a useful optimization for improving cache locality and reducing allocator traffic for workloads that fit within the inline buffer.

## `no_std` support

By default, `smallvec` does not depend on `std`. However, the optional `write` feature implements the `std::io::Write` trait for vectors of `u8`. When this feature is enabled, `smallvec` depends on `std`.

## Optional features

### `serde`

When this optional dependency is enabled, `SmallVec` implements the `serde::Serialize` and `serde::Deserialize` traits.

### `write`

When this feature is enabled, `SmallVec<[u8; _]>` implements the `std::io::Write` trait. This feature is not compatible with `#![no_std]` programs.

### `union`

This feature requires Rust 1.49.

When the `union` feature is enabled `smallvec` will track its state (inline or spilled) without the use of an enum tag, reducing the size of the `smallvec` by one machine word. This means that there is potentially no space overhead compared to `Vec`. Note that `smallvec` can still be larger than `Vec` if the inline buffer is larger than two machine words.

To use this feature add `features = ["union"]` in the `smallvec` section of Cargo.toml. Note that this feature requires Rust 1.49.

Tracking issue: rust-lang/rust#55149

### `const_generics`

This feature is unstable and requires a nightly build of the Rust toolchain.

When this feature is enabled, `SmallVec` works with any arrays of any size, not just a fixed list of sizes.

Tracking issue: rust-lang/rust#44580

### `specialization`

This feature is unstable and requires a nightly build of the Rust toolchain.

When this feature is enabled, `SmallVec::from(slice)` has improved performance for slices of `Copy` types. (Without this feature, you can use `SmallVec::from_slice` to get optimal performance for `Copy` types.)

Tracking issue: rust-lang/rust#31844

### `may_dangle`

This feature is unstable and requires a nightly build of the Rust toolchain.

This feature makes the Rust compiler less strict about use of vectors that contain borrowed references. For details, see the Rustonomicon.

Tracking issue: rust-lang/rust#34761

## Macros

smallvec | Creates a `SmallVec` containing the arguments.

## Structs

Drain | An iterator that removes the items from a `SmallVec` and yields them by value.
IntoIter | An iterator that consumes a `SmallVec` and yields its items by value.
SmallVec | A `Vec`-like container that can store a small number of elements inline.

## Enums

CollectionAllocErr | Error type for APIs with fallible heap allocation

## Traits

Array | Types that can be used as the backing store for a SmallVec
ToSmallVec | Convenience trait for constructing a `SmallVec`