是否可以在Rust中删除静态生存期对象?

问题描述 投票:0回答:1

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

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

谢谢!

rust
1个回答
0
投票

否。 static的重点在于它是静态的:它在内存中具有固定的地址,不能从那里移动。结果,每个人都可以自由引用该对象,因为只要程序正在执行,就可以保证存在该对象。这就是为什么您只能以static引用的形式使用&'static且永远不能声明所有权的原因。

此外,出于节省内存的目的这样做是没有意义的:将对象烘焙到可执行文件中并在访问时映射到内存。 可能发生的所有事情都是因为OS放弃了内存[[mapping。但是,由于从一开始就从来没有从堆中分配内存,所以就没有保存空间。

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

© www.soinside.com 2019 - 2024. All rights reserved.