假设我有以下代码:
float[] test = new float[10];
for(int i = 0; i < 10; i++)
{
test[i] = i + 1.0f;
}
Run Code Online (Sandbox Code Playgroud)
我将一个新的浮点数重新分配给测试数组,如下所示:
test = new float[10];
Run Code Online (Sandbox Code Playgroud)
通过Console.WriteLine调试后,显示reassign的test值为0,test是不是引用了新创建的float数组,还是之前的数组被清空重新创建?
我已经阅读了一些关于堆和堆栈的文章,但这并没有解决我的困惑。
在深处,test是一个指向一定大小的内存块的指针sizeof(float) * 10)(该块可能有点大,但超出了点)。
在循环中,您开始将值放入该内存块中。然后,当你这样做时test = new float[10];,CLR 会给你一个指向内存中新块的新指针。
内存中的前一个块将在未来的某个时刻被垃圾收集器回收(除非它在其他地方被使用)。