1个不稳定版本
新版本 0.1.0 | 2024年8月20日 |
---|
#5 in #german
34KB
657 行
german-str
German字符串是一种具有以下属性的字符串类型
- 它们是不可变的。
size_of::<GermanStr>() == 16
- 它们的长度不能超过2^32字节。
- 12个或更少字节的字符串完全位于栈上。
- 仅取决于前4个字节的比较非常快。
它们在这里被描述 这里. TL;DR: 它是一个16字节的结构,其中
- 结构的第一个4字节是一个
u32
,表示字符串的长度。 - 字符串的前4个字节直接存储在其后。
- 如果字符串的其余部分可以适应剩余的8个字节,则直接存储在那里。
- 否则,最后8个字节是指向堆上字符串缓冲区的指针(该缓冲区包括4个字节的前缀)。
实现受到了 SmolStr
的极大启发。
与 SmolStr
相比,GermanStr
的主要缺点是默认情况下堆缓冲区之间不共享:这是通过调用 leaky_shared_clone
实现的,它在O(1)时间内克隆,但引入了与手动内存管理相关的风险。
需求
[cfg(target_pointer_width= "64")]
- 该包与
[no_std]
兼容。
基准测试
以下图形由包的基准测试生成。在行的前半部分,对随机ASCII字符串进行比较。因此,绝大多数比较只需要比较前缀。在后半部分(最坏情况),比较的字符串是相同的,每对字节都必须进行比较。除非字符串足够短可以内联,否则性能与比较两个常规 String
相当。
依赖关系
~215KB