1 个不稳定版本
0.1.0 | 2019年9月11日 |
---|
#38 在 #capacity
15KB
270 行
JavaString
JavaString
JavaString 使用短字符串优化和缺少 "容量" 字段来减少结构体大小和某些情况下的堆碎片化。
功能
- 支持 String API(目前支持很少,但正在稳步增长)
- 比标准字符串尺寸更小(64位平台上为 16 字节 vs 24 字节)
- 64位架构上支持长达 15 字节的字符串内省(或32位架构上的 7 字节)
工作原理
以下是它的工作方式
- 我们存储
len
,字符串的长度,以及data
,字符串本身的指针。 - 我们保持一个不变性,即当且仅当
data
指向一个2字节对齐的地址时,它才是一个有效的指针。 - 现在,每次我们要读取字符串时,我们首先检查
data
的最低有效位,并使用它来确定是否要解引用它。 - 由于
data
只使用一个位作为其标志,因此当它内省时,我们可以使用整个低阶字节作为长度信息。我们通过位右移来实现这一点。 - 在内省时,我们有
std::mem::size_of::<usize>() * 2 - 1
字节的空间。在 x64 上,这是 15 字节,在 32 位架构上,这是 7 字节。
许可证:MIT