編譯時期保證

編譯期間的靜態記憶體管理機制好處多多,包括:

  • 不會產生未初始化的變數。
  • 不會造成記憶體流失 (「一般」來說是這樣,請參閱附註)。
  • 不會導致重複釋放記憶體。
  • 不會使用已釋放的記憶體。
  • 不會產生 NULL 指標。
  • 不會產生忘記鎖定的互斥鎖。
  • 執行緒之間不會發生資料競爭。
  • 不會發生疊代器無效的情形。

在 (安全的) Rust 範疇內,可能還是有機會造成記憶體流失。以下是一些例子:

  • 您可能會使用 Box::leak,以致洩漏指標。如果您為了取得在執行階段中初始化或設定大小的靜態變數,就可能發生這個情況。
  • 您可能會透過 std::mem::forget 讓編譯器「忘記」某個值 (亦即解構函式永遠不會執行)。
  • 您也可能會不小心使用 RcArc 建立參照循環
  • 事實上,有些人會認為無限地填充集合是一種記憶體流失,而 Rust 並不能避免這種情況。

因此,以本課程的宗旨來說,「沒有記憶體流失」應理解為「幾乎沒有『意外的』記憶體流失」。