2个版本
0.2.1 | 2023年7月10日 |
---|---|
0.2.0 | 2023年7月10日 |
#10 in #strings
11KB
174 行
打包不可变字符串
PackedStr
是当所有字符串都是不可变时,Vec<String>
的替代品。
使用 PackedStr
的好处是所有的字符串数据都存储在一个单独的堆分配中。与每个 String
都有自己堆分配的 Vec<String>
相比,这可能会节省空间,每个 String
有自己的堆分配,以及相关的成本(额外的 String
容量、分配器元数据、堆碎片化)。
此外,每个 String
都存储自己的大小和容量,这在 PackedStr
的设计中是不必要的。
PackedStr
实现为一个包含所有字符串数据的大缓冲区和一个指向缓冲区的索引列表。每个字符串切片都可以从其索引重建,以及下一个字符串的索引(或最后一个字符串的缓冲区末尾)。
lib.rs
:
打包不可变字符串
PackedStr
是当所有字符串都是不可变时,Vec<String>
的替代品。
使用 PackedStr
的好处是所有的字符串数据都存储在一个单独的堆分配中。与每个 String
都有自己堆分配的 Vec<String>
相比,这可能会节省空间,每个 String
有自己的堆分配,以及相关的成本(额外的 String
容量、分配器元数据、堆碎片化)。
此外,每个 String
都存储自己的大小和容量,这在 PackedStr
的设计中是不必要的。
PackedStr
实现为一个包含所有字符串数据的大缓冲区和一个指向缓冲区的索引列表。每个字符串切片都可以从其索引重建,以及下一个字符串的索引(或最后一个字符串的缓冲区末尾)。