10 releases (4 breaking)
new 0.6.0 | Mar 23, 2025 |
---|---|
0.5.4 | Feb 19, 2025 |
0.4.1 | Feb 4, 2025 |
0.3.0 | Jan 22, 2025 |
0.1.0 |
|
#244 in Data structures
3,499 downloads per month
Used in 23 crates
(5 directly)
53KB
1.5K
SLoC
byteview
An immutable byte slice that may be inlined, and can be partially cloned without heap allocation.
Think of it as a specialized Arc<[u8]>
that can be inlined (skip allocation for small values) and no weak count.
byteview
was designed to speed up deserialization in lsm-tree
, allow inlining of small values and reduce memory usage compared to Arc'd slices.
Values with a known length can be constructed 2-2.5x faster than using Arc<[u8]>
:
Memory usage
Allocating 200M "" (len=0) strings:
Struct | Memory Usage |
---|---|
Arc<[u8]> |
9.6 GB |
tokio::Bytes |
6.4 GB |
ByteView |
4.8 GB |
Allocating 200M "helloworld" (len=10) strings:
Struct | Memory Usage |
---|---|
Arc<[u8]> |
12.8 GB |
tokio::Bytes |
12.8 GB |
ByteView |
4.8 GB |
Allocating 100M "helloworldhelloworld" (len=20) strings:
Struct | Memory Usage |
---|---|
Arc<[u8]> |
6.4 GB |
tokio::Bytes |
6.4 GB |
ByteView |
2.4 GB |
Allocating 50M "helloworldhelloworldhelloworldhelloworld" (len=30) strings:
Struct | Memory Usage |
---|---|
Arc<[u8]> |
4.0 GB |
tokio::Bytes |
4.0 GB |
ByteView |
3.6 GB |
Allocating 500k "helloworld".repeat(1000)
(len=10'000) strings:
Struct | Memory Usage |
---|---|
Arc<[u8]> |
5 GB |
tokio::Bytes |
5 GB |
ByteView |
5 GB |
Run fuzz tests
cargo +nightly fuzz run fuzz_target_1
Dependencies
~155KB