10 个版本
0.1.12 | 2023 年 8 月 5 日 |
---|---|
0.1.11 | 2023 年 7 月 10 日 |
#73 in 并发
43,341 每月下载量
在 5 个 crates(2 个直接) 中使用
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 转换为私有的副本,可以安全修改。
功能
serde
为InlineArray
实现serde::Serialize
和serde::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