Rust 中的垃圾收集器
Nilesh Katuwal
2022年6月7日
本文将介绍 Rust 使用什么来代替垃圾收集器。
Rust 中的垃圾收集
Rust 是一种通用编程语言。Rust 不是垃圾收集器,而是通过复杂但复杂的类型系统来实现这些属性。
这使得 Rust 非常高效,但相对难以学习和使用。
通常,垃圾收集会定期或按需进行,例如当垃圾堆快满或超过某个阈值时。然后根据算法搜索未使用的变量并释放它们的内存。
例如,当变量离开程序的作用域或其生命周期在编译时到期时,Rust 会插入相应的 LLVM/assembly
指令来释放内存。Rust 还支持垃圾收集技术,例如原子引用计数。
使用仿射类型系统,它监视哪个变量仍然持有一个对象,并在该变量的范围到期时调用其析构函数。在下面的操作中可以观察到仿射型系统。
fn main() {
let p: String = "Good Morning".into();
let m = p;
println!("{}", p);
}
产量:
<anon>:4:24: 4:25 error: use of moved value: `p` [E0382]
<anon>:4 println!("{}", p);
<anon>:3:13: 3:14 note: `p` moved here because it has type `collections::string::String`, which is moved by default
<anon>:3 let m = p;
^
上述收益完美地证明了所有权始终在语言级别进行跟踪。
Rust 采用了一种相对新颖的内存管理方法,它结合了内存所有权
的概念。Rust 轨道可以读取和写入内存。
它检测程序何时使用内存并在不再需要时释放它。它在编译时强制执行内存规则,几乎不可能在运行时出现内存错误。
无需手动跟踪内存。相反,编译器对此负责。
Rust 最显着的特征,所有权,对语言的其余部分有着深远的影响。了解所有权的工作原理至关重要,因为它使 Rust 能够在没有垃圾收集器的情况下提供内存安全保证。
Rust 采用了不同的方法:当拥有它的变量退出作用域时,会自动返回内存。