Rust的slice是否携带额外动态数据?如字符串长度或末尾零标记
Rust字符串切片存储逻辑答疑
核心问题解答
- Rust中的切片(包括字符串切片
&str)是胖指针结构,本身固定携带两个字段:- 指向底层字符串数据起始位置的指针
- 类型为
usize的切片长度值
- 切片不会依赖末尾的零值判断长度,Rust原生字符串也没有末尾补零的设计约定,长度信息直接存储在切片结构体本身,不会存到底层字符串数据的开头或者末尾位置。
对应代码疑问说明
你定义的HashMap<&'static str, &'static str>,key和value的类型都是字符串切片,确实可以指向任意长度的静态字符串:
- 无论指向的字符串内容有多长,
&'static str本身的大小是固定的(64位系统下为16字节,对应1个指针加1个usize长度),HashMap可以正常存储该类型。 - 当你插入值"US Dollar"时,对应的
&'static str切片的长度字段已经被赋值为9,程序需要读取长度时直接读取切片的长度字段即可,不需要额外遍历内容或者查找终止标记。
补充说明:你给出的代码示例中调用hashmap.get("EUR")实际得到的是值"Euro",注释标注的输出usd : US Dollar是笔误,调用hashmap.get("USD")才会得到该输出。
内容的提问来源于stack exchange,提问作者Kos
相关产品推荐
相关产品推荐

