Bootstrap

Rust 的内存管理机制

Rust 的内存管理机制是其最核心的创新之一,它通过 所有权系统(Ownership)借用检查器(Borrow Checker)生命周期(Lifetimes) 在编译期静态保障内存安全,无需垃圾回收(GC)且避免手动管理内存的错误。下面通过代码示例详细解析其机制和安全性原理:


1. 所有权系统(Ownership)

所有权规则
  1. 每个值有且只有一个所有者
  2. 当所有者离开作用域,值会被自动释放(RAII 机制)。
  3. 赋值或传参时,所有权会转移(Move),原变量失效。
示例 1:所有权的转移
fn main() {
   
    let s1 = String::from("hello"); // s1 是所有者
    let s2 = s1;                    // 所有权转移给 s2,s1 失效
    // println!("{}", s1);          // 编译错误!s1 已失去所有权
    println!("{}", s2);             // 正常输出
} // s2 离开作用域,内存自动释放
  • 安全性:避免多个变量指向同一堆内存,防止重复释放(Double Free)。
示例 2:函数传参的所有权转移
fn take_ownership(s: String) {
    // s 获得所有权
    println!("{}", s);
} // s 离开作用域,内存释放

fn main() {
   
    let s = String::from("hello");
    take_ownership(s);          // s 的所有权转移给函数
    // println!("{}", s);       // 编译错误!s 已失效
}

2. 借用(Borrowing)

通过 引用(Reference) 借用值,无需转移所有权,分为 不可变引用(&T)可变引用(&mut T)

借用规则
  1. 同一作用域内,要么有多个不可变引用,要么只有一个可变引用
  2. 引用必须始终有效(生命周期检查)。
示例 3:不可变引用
fn main() {
   
    let s = String::from
;