rust - 有没有办法在 Rust 中删除静态生命周期对象?

标签 rust

在搜索答案时,我找到了 this question ,但是没有提到静态生命周期对象。这个答案中提到的方法(在对象上调用 drop() )可以用于静态生命周期对象吗?

我在想象一个类似链表的情况。您需要(可能)在程序的整个生命周期内保留列表的节点,但是您也可以从列表中删除项目。在程序的整个执行过程中将它们留在内存中似乎很浪费。

谢谢!

最佳答案

没有。 static 的关键在于它是静态的:它在内存中有一个固定地址,不能从那里移动。因此,每个人都可以自由地引用该对象,因为只要程序在执行,它就会一直存在。这就是为什么您只能以 &'static 引用的形式使用 static 并且永远不能声明所有权。

此外,为了节省内存而这样做是没有意义的:对象被烘焙到可执行文件中并在访问时映射到内存。 可能发生的只是操作系统放弃内存映射。然而,由于内存从来没有从一开始就从堆中分配,因此没有任何节省。

可以做的唯一一件事就是使用不安全的可变访问替换对象。这既危险(因为编译器可以自由地假设对象实际上没有改变)又毫无意义,因为内存无法释放,因为它是可执行文件内存映射的一部分。

关于rust - 有没有办法在 Rust 中删除静态生命周期对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141569/

相关文章:

rust - 使用 Append(false) 写入文件无法按预期工作

generics - 使用泛型函数制作盒装特征会返回错误

Rust OpenTelemetry OTLP w/Honeycomb

ios - 将静态库(Rust .a)导入到 iOS 中的 Flutter 项目

rust - 如何将 Vec<Result<T, E>> 转换为 Result<Vec<T>, E>?

enums - 从没有模式匹配的枚举中读取

rust - 仅匹配有效的 UTF-8 字符

hashmap - 如何有效地从 HashMap 中查找和插入?

generics - 无需复制的通用数学

string - “` str` does not have a constant size known at compile-time”是什么意思,最简单的修复方法是什么?