Rust 中的垃圾收集器

Nilesh Katuwal 2022年6月7日
Rust 中的垃圾收集器

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