概述
- 所有权是 Rust 最核心的内存管理机制。
- 与垃圾回收(GC)和手动内存管理不同,Rust 在编译时通过所有权规则确保内存安全。
内存管理
所有权规则
- 每个值都有一个所有者。
- 一个值在任意时间点只能有一个所有者。
- 当所有者超出作用域时,值将被丢弃。
栈与堆
- 栈:后进先出的数据结构,存储固定大小的数据,分配和回收速度快。
- 堆:灵活的内存分配,存储大小可变的数据,分配和回收速度慢。
变量作用域
String 类型
- String 是动态字符串类型,存储在堆上,可动态扩展。
转移所有权
- 将一个值从一个变量转移到另一个变量时,所有权发生转移。
转移所有权示例
let s1 = String::from("hello");
let s2 = s1;
克隆(深拷贝)
克隆示例
let s1 = String::from("hello");
let s2 = s1.clone();
拷贝(浅拷贝)
拷贝示例
let x = 5;
let y = x;
函数传值与返回
函数传值示例
fn takes_ownership(some_string: String) {
println!("{}", some_string);
}
fn makes_copy(some_integer: i32) {
println!("{}", some_integer);
}
函数返回值
函数返回值示例
fn gives_ownership() -> String {
let some_string = String::from("hello");
some_string
}
fn takes_and_gives_back(a_string: String) -> String {
a_string
}
总结
- 所有权是 Rust 确保内存安全的核心机制。
- 理解栈和堆对掌握所有权至关重要。
- 所有权规则简单明了,但需要实践来加深理解。
- 通过 clone 方法可以创建深拷贝,但应谨慎使用以避免性能问题。
- 函数的参数传递和返回值遵循所有权规则。