C#GC是否可以移动内存对象

Bob*_*421 9 c#

让我们假设这个非常基本的C#代码:

var tab = new int[10];
Run Code Online (Sandbox Code Playgroud)

我已经读到非固定变量可以通过垃圾回收器在内存中移动。

我的问题是:在我的程序执行过程中,“ tab”地址是否可能更改?

我只想了解。

实际上,无论制表符值是否更改。

Ren*_*nat 10

是。的内存地址tab可以更改(并且很可能会更改)。参考:ECMA-334 C#语言规范,第23.4章。

关键是,在C#中,因为它是一种托管语言,所以您不必为内存地址而烦恼。所有对tab变量的引用将相应地更改,并且您的程序将在垃圾回收中无缝生存。


Dav*_*ton 10

是的,它会。

但是,您可以根据需要使用fixed关键字来阻止GC移动。