MST

星途 面试题库

面试题:Rust中栈内存生命周期的基础理解

在Rust中,假设我们有一个函数,它接收一个字符串切片并返回一个新的字符串切片,这个新切片是原切片的子串。请编写代码实现,并解释这里涉及的栈内存生命周期是如何工作的。
17.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn get_substring(slice: &str) -> &str {
    // 这里简单返回原切片的前5个字符作为子串
    &slice[0..5]
}

栈内存生命周期解释

  1. 参数 slice:它是一个对字符串切片的引用。这个引用本身存储在栈上,它指向堆上的字符串数据。slice 的生命周期由调用者决定,只要调用者持有对字符串数据的有效引用,slice 就有效。
  2. 返回值 &str:返回的新字符串切片同样是一个引用,存储在栈上,指向堆上原字符串数据的一部分。它的生命周期也依赖于原字符串数据的生命周期。由于原字符串数据的生命周期没有改变,新切片只要原数据有效就一直有效。这里函数并没有创建新的字符串数据,只是创建了指向已有数据的新引用,所以不会涉及额外的堆内存分配和栈内存生命周期管理的复杂性。整个过程中,栈上只是存储和传递了引用,这些引用的生命周期都与堆上原字符串数据的生命周期相关联。