1. 程式人生 > 其它 >Rust基礎01-初見所有權

Rust基礎01-初見所有權

初見所有權

所有權是 Rust 最獨特的特性,它讓 Rust 無需 GC(垃圾收集器)就可保證記憶體安全

  • 什麼是所有權

    Rust 的核心特性就是所有權,所有程式在執行時都必須管理它們使用計算機記憶體的方式

    有些語言有垃圾收集機制,在程式執行時,它們會不斷地尋找不再使用的記憶體

    有些語言中,程式設計師必須顯式地分配和釋放記憶體

    • Rust 對記憶體管理時

      記憶體通過一個所有權系統管理,其中包含一組編譯器在編譯時檢查的規則,當程式執行時,所有權特性不會減慢程式的執行速度

  • Stack & Heap (棧記憶體 與 堆記憶體)

    對於 Rust 這種系統級程式語言,一個值是在 Stack 還是 Heap 上對語言的行為和你為什麼要做某些決定有更大影響

    在程式執行時,Stack 和 Heap 都是可用的記憶體,但它們的結構很不同

    1. 儲存資料:

      • Stack

        按值的接收順序來儲存,按相反的順序移除(後進先出,LIFO)新增資料叫 壓入棧,移除資料叫彈出棧

        所有儲存在 Stack 上的資料必須擁有已知的固定的大小

      • Heap

        當將資料放入 Heap 時,會請求一定數量的空間(記憶體組織性較差)

        作業系統在 Heap 裡找到一塊足夠大的空間,把它標記為在用,並返回一個指標,也就是這個空間的地址

        此過程叫做 在 Heap 上進行分配,有時僅稱為"分配"

        適合儲存 大小未知的資料 或 執行時大小可能發生變化的資料

      • 其他

    2. 訪問資料:

    3. 函式呼叫:

      當你的程式碼呼叫函式時,值被傳入函式(也包括指向 Heap 的指標)函式本地的變數被壓倒 Stack 上,當函式結束時,這些值會從 Stack 上彈出

  • 所有權解決的問題:

    1. 追蹤程式碼的哪些部分正在使用 Heap 的哪些資料
    2. 最小化 Heap 上的重複資料量
    3. 清理 Heap 上未使用的資料以避免空間不足