在 Rust 中,「Ownership(擁有權)」是一組由編譯器檢查的規則,目的是為了防止記憶體錯誤,例如重複釋放、記憶體洩漏等問題。這個系統讓 Rust 能夠在不需要垃圾回收(garbage collection)的情況下,安全且高效地管理記憶體。
語言策略 | 說明 |
---|---|
手動記憶體管理 | 像 C / C++,由程式設計師自己負責配置與釋放(容易出錯) |
垃圾回收 | 像 Java、Python、Go,會自動尋找不再使用的資料來釋放(但可能拖慢效能) |
擁有權系統 | Rust 的做法:由編譯器檢查規則,在編譯階段就防止錯誤 |
在電腦的記憶體中,Stack(堆疊) 與 Heap(堆積) 是兩個不同的區域,它們負責儲存資料的方式不同,各有優缺點。
比較項目 | Stack | Heap |
---|---|---|
資料大小 | 固定大小 | 可變大小 |
配置速度 | 快(直接儲存) | 慢(需配置器搜尋空間) |
存取方式 | 直接存取(快) | 間接透過指標(稍慢) |
應用場景 | 原始型別、靜態大小資料 | 動態大小資料、需長期儲存的資料 |
Rust 的 所有權(Ownership)系統存在的目的之一就是要:
在 Rust 中,變數的作用域(Scope)決定了變數何時有效。當變數進入作用域時,它就可以被使用;當變數離開作用域時,它就不再有效。 作用域主要與程式碼中的花括號 {} 相關聯,例如函式或 if 區塊。當變數離開作用域時,Rust 就會自動釋放資源,這稱為 drop(釋放)。案例如下:
fn main() {
{
let x = 5;
println!("{}", x); // ✅ 有效,x 在這個區塊內
}
println!("{}", x); // ❌ 錯誤!x 已經離開作用域,被釋放(drop)
}
因此第二個println!會出現以下錯誤:
error[E0425]: cannot find value `x` in this scope
--> src\main.rs:14:20
|
14 | println!("{}", x);
| ^ not found in this scope
For more information about this error, try `rustc --explain E0425`.
error: could not compile `ownership` (bin "ownership") due to 1 previous error