【发布时间】:2012-07-22 09:29:48
【问题描述】:
有没有办法告诉 .net runtime,不在内存中重新定位对象?
恕我直言 - 在以下情况下,GC 可以重新定位对象:
- 从一代传到另一代
- 正在从
finilization-queue移动到f-reachable队列。 -
else(可能是优化机制?)。
另外,我认为不可变(字符串)每次都会自动重新创建,因此必须在新位置创建它们。
(只是一个理论问题)
【问题讨论】:
-
这有什么意义?在 regular c# 中,对象位置是我们无法获得的实现细节......你想做什么?
-
不可变对象不会被“重新创建”,并且不可变性不会影响对象是否会被重定位。
-
@MarcGravell 正在学习我的朋友,正在学习。
-
@Royi 是的,但您不会想要覆盖旧位置;其他参考可能指向它。如果你在原地重写它,你会意外地改变其他引用所指的内容,
-
@RoyiNamir -
s是引用而不是对象。将分配一个新的字符串“2”,而之前由s指向的旧字符串“1”将保留。
标签: c# .net memory-management .net-4.0 clr