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 採用了不同的方法:當擁有它的變數退出作用域時,會自動返回記憶體。