9 unstable releases (3 breaking)

new 0.5.4 Feb 19, 2025
0.5.3 Feb 9, 2025
0.4.1 Feb 4, 2025
0.3.0 Jan 22, 2025
0.1.0 Aug 23, 2024

#430 in Data structures

Download history 5/week @ 2024-10-30 6/week @ 2024-11-06 175/week @ 2025-01-22 371/week @ 2025-01-29 1250/week @ 2025-02-05 683/week @ 2025-02-12

2,479 downloads per month
Used in 17 crates (2 directly)

MIT/Apache

50KB
1K 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 Arcs:

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

~165KB