编译期保证
编译期的静态内存管理:
- 没有未初始化的变量。
- 没有内存泄漏(几乎没有, 看备注)
- 没有重复释放(double-frees)。
- 没有释放后使用(use-after-free)。
- 没有
NULL
指针。 - 没有忘记锁定的互斥锁。
- 没有线程间数据竞争。
- 没有迭代器无效。
在 (safe) Rust 中产生内存泄漏是有可能的。比如:
- 你可以使用
Box::leak
泄漏一个指针。这个可以获得一个运行时初始化和运行时确定大小的静态变量 - 你可以使用
std::mem::forget
让编译期 “忘记” 一个值(意味着销毁器永远不会执行)。 - 你还可能使用
Rc
或Arc
意外创建一个循环引用。* 事实上,有些人会认为无限填充集合也是内存泄漏,Rust 无法防止这些内存泄漏。
就本课程而言,“没有内存泄漏” 应理解为 “几乎没有意外的内存泄漏”