7 releases
0.2.0 | Jul 31, 2023 |
---|---|
0.1.5 | Jan 17, 2022 |
0.1.3 | Jul 7, 2021 |
0.1.1 | Jun 30, 2021 |
#269 in Memory management
312 downloads per month
Used in 2 crates
(via mbroker)
93KB
2K
SLoC
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
Features
small-vec
- UsesSmallVec
instead ofVec
to store the list of segments, allowing the first few segment headers to live on the stack. Can speed up access for smallSegVec
values.thin-segments
- UsesThinVec
instead ofVec
to 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
Dependencies
~170–300KB