1 个不稳定版本
0.1.1 | 2024年3月27日 |
---|---|
0.1.0 |
|
#658 in 内存管理
在 portal-tunneler 中使用
81KB
2K SLoC
用于内联小型集合以避免不必要的堆分配的类型。
通常需要使用向量存储几个小元素,并最终使用 [Vec
]。此类型在堆上分配内存,如果你只使用几个元素,那么使用栈或在内联结构中内联向量会更有效率。
例如,域名通常小于100个字符,且不能超过255个字符。与其使用在创建和克隆时都在堆上分配内存的 String
,你可以使用一个 TinyString::<255>
,这是一个256字节的架构,可以存储最多255个字节,并使用内联内存,克隆就像复制内存一样简单
use inlined::TinyString;
use std::fmt::Write;
let mut s = TinyString::<32>::new(); // 32 is the maximum length of the string
s.push_str("Hello!");
assert_eq!(s.as_str(), "Hello!");
let _ = write!(s, " Your number is {}.", 1234);
assert_eq!(s.as_str(), "Hello! Your number is 1234.")
提供类型
此crate包含以下类型
InlineVec
和InlineString
类型类似于标准库中的 [Vec
] 和String
,但它们是内联的,并且具有固定的、有限的容量。TinyVec
和TinyString
类型工作方式类似,但使用u8
而不是usize
作为长度。这使得它们更适合传递或在其他结构中内联。- 《
CompactVec
》是一种类型,它将 [Vec
] 和TinyVec
结合在一起,表示一个可以内联存储最多N
个元素的向量,但如果需要更多容量,则会溢出到堆上并分配内存。
由于这些类型都实现了 Deref
,对于 &[T]
或 &str
,因此它们包含了许多您习惯于从 [Vec
] 和 String
中拥有的方法。
指定容量
所有这些类型都使用 const generics 来指定它们的内联容量。这意味着您可以选择希望您的内联类型存储的最大元素数量。无论您是想存储仅仅 3、100,甚至是数千个元素,这些类型都能满足您的需求。