没有关键字“new”的数组初始化

时间:2014-10-08 08:22:22

标签: c# arrays stack heap

在C#中,可以初始化一个没有关键字“new”的数组,如下例所示:

int[] x = { 10, 20, 30 };

这是否意味着数组将在堆栈上初始化,因为关键字“new”是初始化堆上的东西所必需的?

3 个答案:

答案 0 :(得分:5)

简短回答:不。

您展示的代码是int[] x = new [] { 10, 20, 30 }的简写 这是int[] x = new int[] { 10, 20, 30}的简写 这是int[] x = new int[3]; x[0] = 10; x[1] = 20; x[2] = 30;

的简写

(见MSDN

实施没有区别。

在堆栈中分配数组的唯一方法是使用带有stackalloc关键字的不安全代码,如注释中所指出的那样。 MSDN的示例:

int* block = stackalloc int[100];

答案 1 :(得分:0)

我想在此处添加更多内容。

  

堆栈中的内容是int数组的heapAddress。让   当你把那个数组传递给某个函数时,那你就是什么   传递的是来自Stack的heapAddress值。

答案 2 :(得分:-2)

生成的中间代码对于new和没有新的初始化是相同的。

示例代码:

 public class Class1
{
    int[] a = new int[4];
}

public class Class2
{
    int[] a = { 1, 2, 3, 4 };
}

编译:

(因为我没有上传图片的必要点,你可以在ildasm中查看)