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
pushoperations even if theSegVecmust 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 aSegVecthan for aVec(multiple pointer dereferences, mapping indices to(segment, offset)pairs) - Direct slicing is unavailable (i.e. no
&[T]or&mut [T]), thoughsliceandslice_mutare available
Use Cases
- You have a long-lived
Vecwhose size fluctuates between very large and very small throughout the life of the program. - You have a large append-only
Vecand would benefit from stable references to the elements
Features
small-vec- UsesSmallVecinstead ofVecto store the list of segments, allowing the first few segment headers to live on the stack. Can speed up access for smallSegVecvalues.thin-segments- UsesThinVecinstead ofVecto store the data for each segment, meaning that each segment header takes up the space of a singleusize, rathern than 3 when usingVec.
License: MIT