Rust 的内存管理机制是其最核心的创新之一,它通过 所有权系统(Ownership)、借用检查器(Borrow Checker) 和 生命周期(Lifetimes) 在编译期静态保障内存安全,无需垃圾回收(GC)且避免手动管理内存的错误。下面通过代码示例详细解析其机制和安全性原理:
1. 所有权系统(Ownership)
所有权规则
- 每个值有且只有一个所有者。
- 当所有者离开作用域,值会被自动释放(RAII 机制)。
- 赋值或传参时,所有权会转移(Move),原变量失效。
示例 1:所有权的转移
rust">fn main() {let s1 = String::from("hello"); // s1 是所有者let s2 = s1; // 所有权转移给 s2,s1 失效// println!("{}", s1); // 编译错误!s1 已失去所有权println!("{}", s2); // 正常输出
} // s2 离开作用域,内存自动释放
- 安全性:避免多个变量指向同一堆内存,防止重复释放(Double Free)。
示例 2:函数传参的所有权转移
rust">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)。
借用规则
- 同一作用域内,要么有多个不可变引用,要么只有一个可变引用。
- 引用必须始终有效(生命周期检查)。
示例 3:不可变引用
rust">fn main() {let s = String::from