在寻找答案时,我发现了这个问题,但是没有提到静态生命周期对象。这个答案中提到的方法(调用drop()对象)可以用于静态生命周期对象吗?
我想象了一种类似链表的情况。您需要(可能)在程序的整个生命周期中保留列表的节点,但是您也可以从列表中删除项目。在程序的整个执行过程中将它们保留在内存中似乎很浪费。
谢谢!
不。 a 的关键static在于它是静态的:它在内存中有一个固定的地址,并且不能从那里移动。因此,每个人都可以自由地引用该对象,因为只要程序正在执行,它就保证存在。static这就是为什么你只能以 -reference的形式使用 a&'static并且永远不能声明所有权。
此外,为了节省内存而这样做是没有意义的:该对象被烘焙到可执行文件中并在访问时映射到内存。操作系统可能会放弃内存映射。然而,由于内存从一开始就没有从堆中分配,因此没有任何节省。
您唯一能做的就是使用不安全的可变访问来替换对象。这既危险(因为编译器可以自由地假设对象实际上没有改变),又毫无意义,因为内存无法释放,因为它是可执行文件内存映射的一部分。
| 归档时间: |
|
| 查看次数: |
2438 次 |
| 最近记录: |