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 Aug 23, 2024

#244 in Data structures

Download history 169/week @ 2025-01-20 183/week @ 2025-01-27 1093/week @ 2025-02-03 857/week @ 2025-02-10 1370/week @ 2025-02-17 857/week @ 2025-02-24 928/week @ 2025-03-03 819/week @ 2025-03-10 754/week @ 2025-03-17

3,499 downloads per month
Used in 23 crates (5 directly)

MIT/Apache

53KB
1.5K SLoC

byteview

CI CI docs.rs Crates.io MSRV

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.

Memory layout

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]>:

Constructor benchmark

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