segvec
This crate provides the SegVec
data structure.
It is similar to Vec
, but allocates memory in chunks of increasing size, referred to as "segments". This involves a few trade-offs:
Pros:
- Element addresses are stable across
push
operations even if theSegVec
must grow. - Resizing only allocates the additional space needed, and doesn't require copying.
Cons:
- Operations are slower (some, like
insert
,remove
, anddrain
, are much slower) for aSegVec
than for aVec
(multiple pointer dereferences, mapping indices to(segment, offset)
pairs) - Direct slicing is unavailable (i.e. no
&[T]
or&mut [T]
), thoughslice
andslice_mut
are available
Use Cases
- You have a long-lived
Vec
whose size fluctuates between very large and very small throughout the life of the program. - You have a large append-only
Vec
and would benefit from stable references to the elements
License: MIT