編譯時期保證
編譯期間的靜態記憶體管理機制好處多多,包括:
- 不會產生未初始化的變數。
- 不會造成記憶體流失 (「一般」來說是這樣,請參閱附註)。
- 不會導致重複釋放記憶體。
- 不會使用已釋放的記憶體。
- 不會產生
NULL
指標。 - 不會產生忘記鎖定的互斥鎖。
- 執行緒之間不會發生資料競爭。
- 不會發生疊代器無效的情形。
在 (安全的) Rust 範疇內,可能還是有機會造成記憶體流失。以下是一些例子:
- 您可能會使用
Box::leak
,以致洩漏指標。如果您為了取得在執行階段中初始化或設定大小的靜態變數,就可能發生這個情況。 - 您可能會透過
std::mem::forget
讓編譯器「忘記」某個值 (亦即解構函式永遠不會執行)。 - 您也可能會不小心使用
Rc
或Arc
建立參照循環。 - 事實上,有些人會認為無限地填充集合是一種記憶體流失,而 Rust 並不能避免這種情況。
因此,以本課程的宗旨來說,「沒有記憶體流失」應理解為「幾乎沒有『意外的』記憶體流失」。