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

Slo*_*hie 5 rust

在寻找答案时,我发现了这个问题,但是没有提到静态生命周期对象。这个答案中提到的方法(调用drop()对象)可以用于静态生命周期对象吗?

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

谢谢!

use*_*968 6

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

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

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


归档时间:

查看次数:

2438 次

最近记录:

6 年,1 月 前