Rust 有没有办法使一个静态的终身物体生锈?

Rust 有没有办法使一个静态的终身物体生锈?,rust,Rust,在搜索答案时,我发现,但是没有提到静态生命周期对象。此应答中提到的方法调用对象上的drop是否可以用于静态生存期对象 我在想象一个类似链表的情况。您需要在程序的整个生命周期内保留列表中的节点,但是也可以从列表中删除项目。在整个程序执行过程中,将它们留在内存中似乎是浪费 谢谢 不是。静态的关键在于它是静态的:它在内存中有一个固定地址,不能从那里移动。因此,每个人都可以自由地拥有对该对象的引用,因为只要程序在执行,它就保证存在。这就是为什么您只能以&“static-reference”的形式使用st

在搜索答案时,我发现,但是没有提到静态生命周期对象。此应答中提到的方法调用对象上的drop是否可以用于静态生存期对象


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

谢谢

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

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


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

为什么要删除具有静态生存期的对象?我想象的情况类似于链表。您需要在程序的整个生命周期内保留列表中的节点,但是也可以从列表中删除项目。在整个程序执行过程中,将它们留在内存中似乎是浪费。我可以编辑原始问题以使其更清楚。@Slothie如果您不想在整个执行期间将它们保留在内存中,它们就不再是静态的。@Slothie您可以在对象上使用生命周期,它可以是“静态的,但不一定是”。@jhpratt,您能澄清一下您的意思吗,但不一定是这样吗?