Rust 程序设计语言 简体中文版 1.85.0果忘记回收了会浪费内存。如果过 70/562Rust 程序设计语言 简体中文版 早回收了,将会出现无效变量。如果重复回收,这也是个 bug。我们需要精确的为一个 allocate 配对一个 free。 Rust 采取了一个不同的策略:内存在拥有它的变量离开作用域后就被自动释放。下面是示例 4-1 中作用域例子的一个使用 String 而不是字符串字面值的版本: { drop 函数并清理变量的堆内存。不过图 4-2 展示了两个数据指针指向了同一位置。这就有了一个问题:当 s2 和 s1 离开作用域,它们 都会尝试释放相同的内存。这是一个叫做 二次释放(double free)的错误,也是之前提到过 的内存安全性 bug 之一。两次释放(相同)内存会导致内存污染,它可能会导致潜在的安全 漏洞。 74/562Rust 程序设计语言 简体中文版 为了确保内存安全,在 let 。Rust 中 的 drop 函数就是这么一个析构函数。 Rust 不允许我们显式调用 drop 因为 Rust 仍然会在 main 的结尾对值自动调用 drop,这会导 致一个 double free 错误,因为 Rust 会尝试清理相同的值两次。 因为不能禁用当值离开作用域时自动插入的 drop,并且不能显式调用 drop 方法。如果我们需 要强制提早清理值,可以使用 std::mem::drop0 码力 | 562 页 | 3.23 MB | 23 天前3
共 1 条
- 1













