数组内存分配说明

时间:2011-10-20 04:59:29

标签: c# .net

今天我正在阅读有关数组及其内存分配的SO线程。我找到了一个answer,它被巧妙地解释了,我必须说它很棒。

但是在看完那个答案之后,我又收到了一些问题,我一直在问自己刚刚读到的内容。到目前为止,我仍然无法自己回答,也无法谷歌。因此,在向我解释这些问题时,我需要你的帮助。

  1. 为什么在每个内容都是在堆上创建数组 存储在堆栈上?只有2在值类型的情况下避免装箱?
  2. 如果上面的情况属实,那么为什么数组首先要在堆上创建2?

  3. 当他在回答时说新的int [100]实际上是在堆上创建的,是否在堆上分配了400(100 * 4)个字节? 如果是这样,为什么?因为所有的值都存储在堆栈上

  4. 如果创建了1000个项目数组,那么地球堆栈的存储方式就足够了?我知道1 MB是分配的堆栈的大小。但在 这种情况会超过。那么基本原理是什么?
  5. 如果您有这方面的问题,请随时添加您自己的问题或更多信息。

    由于

2 个答案:

答案 0 :(得分:3)

当我们说数组在堆上分配时,它意味着值将在堆中。数组值不存储在堆栈中。我认为这回答了所有3个问题。

var myArray = new int[10];

上面的行在堆栈上创建myArray 变量,但是数组的内存在堆上分配,因此存储在其中的所有值也都在堆中。

答案 1 :(得分:2)

据我所知,在非正式定义中,值类型存储在本地定义它们的位置。因此,如果在方法中定义单个值类型,它将存储在堆栈中。如果它被定义为类的字段,或者在这种情况下,作为数组中的项,那么'parent'对象就在堆上,因此值类型也将存储在堆上。

<强>更新

有关值类型与引用类型和堆栈的更多详细信息,请查看Eric Lippert的文章: