今天我正在阅读有关数组及其内存分配的SO线程。我找到了一个answer,它被巧妙地解释了,我必须说它很棒。
但是在看完那个答案之后,我又收到了一些问题,我一直在问自己刚刚读到的内容。到目前为止,我仍然无法自己回答,也无法谷歌。因此,在向我解释这些问题时,我需要你的帮助。
如果上面的情况属实,那么为什么数组首先要在堆上创建2?
当他在回答时说新的int [100]实际上是在堆上创建的,是否在堆上分配了400(100 * 4)个字节? 如果是这样,为什么?因为所有的值都存储在堆栈上
如果您有这方面的问题,请随时添加您自己的问题或更多信息。
由于
答案 0 :(得分:3)
当我们说数组在堆上分配时,它意味着值将在堆中。数组值不存储在堆栈中。我认为这回答了所有3个问题。
var myArray = new int[10];
上面的行在堆栈上创建myArray 变量,但是数组的内存在堆上分配,因此存储在其中的所有值也都在堆中。
答案 1 :(得分:2)
据我所知,在非正式定义中,值类型存储在本地定义它们的位置。因此,如果在方法中定义单个值类型,它将存储在堆栈中。如果它被定义为类的字段,或者在这种情况下,作为数组中的项,那么'parent'对象就在堆上,因此值类型也将存储在堆上。
<强>更新强>
有关值类型与引用类型和堆栈的更多详细信息,请查看Eric Lippert的文章: