Crate inline_array
source ·Expand description
InlineArray
is an inlinable array of bytes that is intended for situations where many bytes
are being shared in database-like scenarios, where optimizing for space usage is extremely
important.
InlineArray
uses 8 bytes on the stack. It will inline arrays of up to 7 bytes. If the bytes
are longer than that, it will store them in an optimized reference-count-backed structure,
where the atomic reference count is 16 bytes. If the maximum counter is reached, the bytes
are copied into a new InlineArray
with a fresh reference count of 1. This is made with
the assumption that most reference counts will be far lower than 2^16.
Both the inline and shared instances of InlineArray
guarantee that the stored array is
always aligned to 8-byte boundaries, regardless of if it is inline on the stack or
shared on the heap. This is advantageous for using in combination with certain
zero-copy serialization techniques.
The 16-bit reference counter is stored packed with a 48-bit length field at the beginning of the shared array. Byte arrays that require more than 48 bits to store their length (256 terabytes) are not supported.
InlineArray::make_mut
can be used for getting a mutable reference to the bytes in this
structure. If the shared reference counter is higher than 1, this acts like a Cow
and
will make self into a private copy that is safe for modification.
Structs
- A buffer that may either be inline or remote and protected by an Arc. The inner buffer is guaranteed to be aligned to 8 byte boundaries.