#string #byte #optimization #cases #heap #short #capacity

JavaString

JavaString 利用短字符串优化和缺少 '容量' 字段来减少结构体大小和某些情况下的堆碎片化

1 个不稳定版本

0.1.0 2019年9月11日

#38#capacity

MIT 许可证

15KB
270

JavaString

JavaString

JavaString 使用短字符串优化和缺少 "容量" 字段来减少结构体大小和某些情况下的堆碎片化。

功能

  • 支持 String API(目前支持很少,但正在稳步增长)
  • 比标准字符串尺寸更小(64位平台上为 16 字节 vs 24 字节)
  • 64位架构上支持长达 15 字节的字符串内省(或32位架构上的 7 字节)

工作原理

以下是它的工作方式

  1. 我们存储 len,字符串的长度,以及 data,字符串本身的指针。
  2. 我们保持一个不变性,即当且仅当 data 指向一个2字节对齐的地址时,它才是一个有效的指针。
  3. 现在,每次我们要读取字符串时,我们首先检查 data 的最低有效位,并使用它来确定是否要解引用它。
  4. 由于 data 只使用一个位作为其标志,因此当它内省时,我们可以使用整个低阶字节作为长度信息。我们通过位右移来实现这一点。
  5. 在内省时,我们有 std::mem::size_of::<usize>() * 2 - 1 字节的空间。在 x64 上,这是 15 字节,在 32 位架构上,这是 7 字节。

许可证:MIT

无运行时依赖