面试题答案
一键面试fn get_substring(slice: &str) -> &str {
// 这里简单返回原切片的前5个字符作为子串
&slice[0..5]
}
栈内存生命周期解释
- 参数
slice
:它是一个对字符串切片的引用。这个引用本身存储在栈上,它指向堆上的字符串数据。slice
的生命周期由调用者决定,只要调用者持有对字符串数据的有效引用,slice
就有效。 - 返回值
&str
:返回的新字符串切片同样是一个引用,存储在栈上,指向堆上原字符串数据的一部分。它的生命周期也依赖于原字符串数据的生命周期。由于原字符串数据的生命周期没有改变,新切片只要原数据有效就一直有效。这里函数并没有创建新的字符串数据,只是创建了指向已有数据的新引用,所以不会涉及额外的堆内存分配和栈内存生命周期管理的复杂性。整个过程中,栈上只是存储和传递了引用,这些引用的生命周期都与堆上原字符串数据的生命周期相关联。