为什么数组引用类型?

时间:2018-01-10 16:35:28

标签: c# .net arrays

int[] age=new int[5];

在阅读了很多帖子和博客之后,我仍然不清楚为什么数组是引用类型的事实。我知道这个问题很老了,已被问过很多次,但仍然无法找到直接答案。

已知的事情:由于数组是在堆上分配的,因此它们是引用类型。

需要知道:将(编译器)数组作为引用类型的原因是什么? 假设age [0] = 5,age [1] = 25,如果它们的类型是object,那么在堆栈上分配这些或者引用堆的难度是多少。为什么考虑堆作为访问时间相对较慢?。

为什么堆,为什么不在堆栈上像结构一样?。

1 个答案:

答案 0 :(得分:4)

有几个原因:

  1. 值类型按值传递(如复制时)。因此,如果您使用值类型数组调用方法,则您将复制所有内容。

  2. 堆栈内存有限,主要用于快速访问当前使用的参数(如术语堆栈所暗示)。将大对象放到堆栈上会导致查找其他本地状态需要更长时间,因为它们不再都在CPU缓存中的同一缓存行上。

  3. 数组内容可以修改。因此,当您尝试设置值时,您会遇到可变结构的所有问题,只能找到副本,而不是"原始"被修改了。

  4. 编辑: 是的,您可以在不安全的代码中使用stackalloc。并不是一个好主意。