面试题答案
一键面试存储方式
- 编译期确定:Rust中的字符串字面量是在编译期就确定内容的,其内容存储在程序的只读数据段(通常也称为.rodata段)。这意味着在程序运行时,字符串字面量的值不会改变,多个相同的字符串字面量在内存中实际上指向同一块只读区域,从而节省内存空间。
数据结构
- 类型为
&str
:字符串字面量的类型是&str
,即字符串切片。它是一个指向字符串内容的指针,并且包含一个长度信息。在64位系统上,&str
通常占据16字节的内存空间,其中8字节用于存储指向字符串内容的指针,另外8字节用于存储字符串的长度(以字节为单位)。例如:
let s: &str = "hello";
这里的s
就是一个&str
类型,它指向只读数据段中存储的"hello",并记录其长度为5字节。
生命周期特点
- 静态生命周期:字符串字面量具有
'static
生命周期。这意味着它们的生命周期和整个程序的生命周期一样长。无论在何处使用字符串字面量,它们始终有效,不会因为作用域的结束而被销毁。例如:
fn get_string() -> &'static str {
"hello"
}
在这个函数中,返回的字符串字面量"hello"具有'static
生命周期,所以函数可以安全地返回它,而不用担心其生命周期问题。即使函数调用结束,这个字符串字面量依然存在于只读数据段中。