c# - 如果我将新数组分配给现有值类型数组会发生什么?
问题描述
假设我有以下代码:
float[] test = new float[10];
for(int i = 0; i < 10; i++)
{
test[i] = i + 1.0f;
}
我重新分配一个新的浮点数来测试数组,如下所示:
test = new float[10];
通过Console.WriteLine调试后显示reassign的test
值为0,请问test
是引用了新创建的float数组,还是之前的数组被清空重新创建?
我已经阅读了一些关于堆和堆栈的文章,但这并没有解决我的困惑。
解决方案
在深处,test
是一个指向一块大小的内存的指针sizeof(float) * 10)
(该块可能有点大,但这超出了重点)。
在循环中,您开始将值放入该内存块中。然后,当你这样做时test = new float[10];
,CLR 会给你一个指向内存中新块的新指针。
内存中的前一个块将在将来的某个时候被垃圾收集器回收(除非它正在其他地方使用)。
推荐阅读
- visual-studio-code - Visual Studio Code 在自动生成的 pbiviz.json 文件上给出 schema.pbiviz.json“找不到文件”错误消息?
- sql - 如何将字段名称或列名称类、员工、分数传递给 SSRS 中的参数类型?
- spring-boot - 使用 hasIpAddress 表达式授权请求但使用从反向代理转发的 IP?
- intellij-idea - IntelliJ IDEA v2019.2 在等号之前缩进拉取值
- keycloak - 通过 Keycloak REST API 定义新的用户密码
- html - 如果输入有值,CSS会改变样式
- python - 通过代理连接到远程 jupyter 实验室实例
- visual-studio - 是否有 Visual Studio 命令来更改输出窗口的“显示输出”设置?
- r - R 中的 ML-Flow 安装
- angular - 为什么在 ngrx 效果中返回的 observable 内没有应用该操作?