C# C中成员数组的内存#
今天我已经编程一段时间了,我想我需要休息一下,因为我似乎无法理解这件非常简单的事情。非常感谢您的帮助 我有一个类(实际上是C# C中成员数组的内存#,c#,arrays,C#,Arrays,今天我已经编程一段时间了,我想我需要休息一下,因为我似乎无法理解这件非常简单的事情。非常感谢您的帮助 我有一个类(实际上是Form1)和一个成员数组int[,]f。 现在,我不管理它的内存,然后(也许我应该?)。 相反,在另一种方法中,我调用一个函数,比如: myFunction(f,.....); 这个函数类似于 void myFunction(int[,] f, ...some other arguments) { //.... f = new int[NX ,NY];
Form1
)和一个成员数组int[,]f
。
现在,我不管理它的内存,然后(也许我应该?)。
相反,在另一种方法中,我调用一个函数,比如:
myFunction(f,.....);
这个函数类似于
void myFunction(int[,] f, ...some other arguments)
{
//....
f = new int[NX ,NY];
//....
}
如您所见,我在函数中为数组f
分离内存
现在我的问题是,;当我离开myFunction时,这个内存会被垃圾回收吗?首先,您必须了解一些非常重要的事情: 垃圾收集是随机进行的 第二, 只有那些没有引用变量的对象才有资格使用GC 第三,
f= new int[NX,NY];
您正在使f
引用其他内容。原始的f
仍由Form1.f
引用。但是这个newint[NX,NY]
对象现在只由方法中的本地f
创建和引用
方法返回后,不应引用新的f
(除非您将其分配到其他地方),因此新的f
符合GC的条件。请注意,我说的是“变得符合GC条件”,而不是“垃圾已收集”
但是,由于
Form1
仍保留对原始f
的引用,因此原始f
在表单符合GC条件之前将不符合GC条件(除非您将其设置为其他内容).它与C++
有什么关系?因此函数中的f及其管理的内存不引用表1.f?它们是副本吗?(我从传递指针的角度来考虑它们)是的,您首先传递指针,直到您执行f=new…
。此时,方法中的f
引用了其他内容,而Form1.f
的值不变@关西机器人