Rust基础

Posted by 淦 Blog on November 3, 2025

所有权

Stack和Heap区别

  • Stack 可以保存指向 Heap上存储的数据的指针,而 Heap 只保存没有指针的数据。
  • Stack 保存不可变数据,而 Heap 保存可变数据。
  • Stack 保存可复制的数据,而 Heap 保存不可复制的数据。
  • Stack 保存与特定函数关联的数据,而 Heap 保存可能比函数存活更长的数据。

原则

  • Box 的所有者来管理内存释放:Rust 会自动释放 Box 的堆(heap)内存。
  • Box 内存释放原则:如果一个变量拥有一个 box,当 Rust 释放该变量的 frame 时,Rust 会释放该 box 的堆内存(heap)。
  • 移动堆(heap)数据原则:如果变量 x 将堆(heap)数据的所有权移动给另一个变量 y,那么在移动后,x 不能再使用。
  • Clone 可避免移动:避免数据移动的一种方法是使用 .clone() 方法进行克隆

引用

没有“所有权”的指针。

1
2
3
4
5
6
7
8
9
10
fn main() {
    let m1 = String::from("hello");
    let m2 = String::from("world");   // L1
    greet(&m1, &m2);   // L3
    let s = format!("{} {}", m1, m2);
}

fn greet(g1: &String, g2: &String) {
    println!("{}, {}", g1, g2);   // L2
}

解引用指针以访问数据,解引用运算符:*

可变引用提供对数据“唯一的”且“非拥有的”访问

  • 不可变引用(共享引用):只读的
  • 可变引用(独占引用):在不移动数据的情况下,临时提供可变访问