MST
星途 面试题库

面试题:Rust数组内存管理与生命周期

假设有一个函数,它接收一个Rust数组切片作为参数,并返回一个新的数组切片,新切片中的元素是原切片元素的平方。请编写这个函数,并详细说明在这个过程中涉及到的内存管理和生命周期问题。
31.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn square_slice(slice: &[i32]) -> Vec<i32> {
    slice.iter().map(|&num| num * num).collect()
}

内存管理

  1. 输入切片:输入的&[i32]切片是借用的,不拥有其指向的内存。这意味着函数不会对输入切片的内存进行分配或释放操作。
  2. 输出结果:函数返回一个Vec<i32>Vec在堆上分配内存来存储元素。map方法遍历输入切片,对每个元素进行平方计算,collect方法将这些结果收集到一个新的Vec中。当Vec离开其作用域时,Rust的自动内存管理机制(Drop trait)会自动释放其在堆上分配的内存。

生命周期

  1. 输入切片的生命周期:输入切片slice的生命周期由调用者决定。函数借用这个切片,只要在函数调用期间切片的生命周期有效即可。
  2. 输出结果的生命周期:返回的Vec<i32>拥有其自身的内存,其生命周期从创建开始,直到离开作用域被销毁。由于Vec拥有自己的数据,它的生命周期不依赖于输入切片的生命周期。因此,这个函数在处理生命周期方面比较简单,不存在悬垂指针等问题。