在C#中,是一个声明为:int [] a = {numbers ...}; 在堆栈?

vex*_*exe 3 c# memory heap stack

在C#中,当我声明一个这样的数组时:

int []a = {1, 2, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)

这是在堆栈中声明的吗?

据我所知,我应该这样做:

int []a = new int[5]{1, 2, 3, 4, 5};
Run Code Online (Sandbox Code Playgroud)

考虑到数组是引用类型.

zer*_*kms 6

这两者没有区别.

第一个只是一个语法糖(MSDN)来保存几个键击.

它们(只要两者都是相同的数组)都在堆中声明,并且引用在堆栈中声明.所以只要你超出范围 - 所以对象变得没有引用并且有资格被垃圾收集.


suk*_*kru 6

实际上有一种方法可以在堆栈中存储数组:

(来自http://www.c-sharpcorner.com/uploadfile/GemingLeader/creating-a-stack-based-array/)

int* pArr = stackalloc int[length];
Run Code Online (Sandbox Code Playgroud)

但由于使用了指针,这需要一个不安全的代码区域.

  • 有意思......虽然不是直接的答案. (4认同)