关于这个记录
最近在学rust,参考的是RUST程序设计语言这本书,学到4.3小节时,对rust中的字符串感到疑惑,翻阅其他资料和帖子后好像理解了些,故做此记录,若有错误还行指出。
以一个例子说明
1 | let s = "hello" |
在rust中,str
是唯一定义在
Rust
语言特性中的字符串,str
在rust中为string slice
,即字符串切片,它是符合UTF-8
规范的一串[u8]
数据,在rust中切片slice
代表类型为T
的元素组成的序列,写作[T]
,是一种DST(dynamically
sized
types,动态大小类型),其不能被直接使用的,而是需要以切片引用的方式来使用。
以上面的这段代码为例,字符串"hello"
即为str
,它被硬编码进可执行程序的数据部分,程序执行时它被存储在只读数据区,表示字符串的实际内容,而"hello"
的字面值类型则为&'static str
,他是一个胖指针,包含指向该str
数据的指针以及长度信息。
此外,rust中由字符串字面值赋值的变量的类型会被默认转换为&str
,因此在这段代码中变量s
的类型为&str
,s
被存储在栈区中。
1 | 高地址 |