编译期保证

编译期的静态内存管理:

  • 没有未初始化的变量。
  • 没有内存泄漏(几乎没有, 看备注)
  • 没有重复释放(double-frees)。
  • 没有释放后使用(use-after-free)。
  • 没有 NULL 指针。
  • 没有忘记锁定的互斥锁。
  • 没有线程间数据竞争。
  • 没有迭代器无效。

在 (safe) Rust 中产生内存泄漏是有可能的。比如:

  • 你可以使用 Box::leak 泄漏一个指针。这个可以获得一个运行时初始化和运行时确定大小的静态变量
  • 你可以使用 std::mem::forget 让编译期 “忘记” 一个值(意味着销毁器永远不会执行)。
  • 你还可能使用 RcArc 意外创建一个循环引用。* 事实上,有些人会认为无限填充集合也是内存泄漏,Rust 无法防止这些内存泄漏。

就本课程而言,“没有内存泄漏” 应理解为 “几乎没有意外的内存泄漏”