#byte-array #multi-threaded #performance #io

inline-array

高效的不可变内联字节数组

10 个版本

0.1.12 2023 年 8 月 5 日
0.1.11 2023 年 7 月 10 日

#73 in 并发

Download history 7314/week @ 2024-03-13 7731/week @ 2024-03-20 6821/week @ 2024-03-27 9725/week @ 2024-04-03 8250/week @ 2024-04-10 7971/week @ 2024-04-17 10857/week @ 2024-04-24 9004/week @ 2024-05-01 8117/week @ 2024-05-08 9795/week @ 2024-05-15 5113/week @ 2024-05-22 10009/week @ 2024-05-29 15206/week @ 2024-06-05 8127/week @ 2024-06-12 7047/week @ 2024-06-19 10031/week @ 2024-06-26

43,341 每月下载量
5 个 crates(2 个直接) 中使用

MIT/Apache

28KB
507

inline-array

InlineArray 是一个堆内联的字节数组,适用于在数据库等场景中共享大量字节,优化空间使用非常重要。

InlineArray 使用 8 字节栈。它将内联长度最多为 7 字节的数组。如果字节长度超过这个范围,它将存储在两种不同变体的优化引用计数结构中。对于长度不超过 255 的数组,数据将存储在一个 AtomicU8 引用计数器和 u8 长度字段中,只有 2 字节的开销。对于更大的值,它们将存储在一个 AtomicU16 引用计数器和 48 位长度字段中。如果任一变体的最大计数器达到,字节将复制到一个新的 InlineArray 中,其引用计数为 1。这是基于假设大多数引用计数将远低于 2^16,并且只有很少的情况会超过 255。

内联和 InlineArray 的两种共享实例都保证存储的数组始终对齐到 8 字节边界,无论是内联在栈上还是共享在堆上。这对于需要对齐保证的某些零拷贝序列化技术是有利的。

不支持存储长度超过 48 位(256 太字节)的字节数组。

InlineArray::make_mut 可用于获取此结构中字节的可变引用。如果共享引用计数器大于 1,则类似于 Cow,并将 self 转换为私有的副本,可以安全修改。

功能

  • serdeInlineArray 实现 serde::Serializeserde::Deserialize(默认禁用)

示例

use inline_array::InlineArray;

let ia = InlineArray::from(b"yo!");

// then use it more or less like you would an Arc<[u8]>

依赖关系

~0–6MB