[寻找答案时,我找到了this question,但是没有提及静态寿命对象。这个答案中提到的方法(在对象上调用drop()
)可以用于静态生命周期对象吗?
我在想像一个链表的情况。您需要在程序的整个生命周期中(可能)保持列表的节点不变,但是您也可以从列表中删除项目。将它们保留在内存中对于整个程序执行似乎是浪费的。
谢谢!
否。 static
的重点在于它是静态的:它在内存中具有固定的地址,不能从那里移动。结果,每个人都可以自由引用该对象,因为只要程序正在执行,就可以保证存在该对象。这就是为什么您只能以static
引用的形式使用&'static
且永远不能声明所有权的原因。
此外,出于节省内存的目的这样做是没有意义的:将对象烘焙到可执行文件中并在访问时映射到内存。 可能发生的所有事情都是因为OS放弃了内存[[mapping。但是,由于从一开始就从来没有从堆中分配内存,所以就没有保存空间。
您唯一可能]要做的就是使用不安全的可变访问来替换对象。这既是危险的(因为编译器可以自由地假定该对象实际上并未更改),而且是无意义的,这是因为无法释放内存,因为它是可执行文件的内存映射的一部分。