数组内存分配说明

今天,我正在阅读关于数组和其内存分配的SO线程。 我找到了一个整齐解释的答案,我必须说它的优秀。

但在读完这个答案之后,我又多了几个问题,我一直在问自己我读的是什么。 到目前为止,我仍然无法自己回答,也无法将其通过Google进行回答。 因此,我需要你的善意帮助向我解释这些问题。

  • 为什么当数组的每个内容都被存储在堆栈上时,数组会在堆上创建? 只是2在值类型的情况下避免拳击?
  • 如果上面是真的,那么为什么数组首先必须在堆上创建?

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

  • 如果创建了1000个物品数组,那么地球上的物品堆栈是否足以存储? 我知道1 MB是分配的堆栈的大小。 但在这种情况下,它会超过。 那么最基本的是什么?
  • 请随时添加您自己的问题或更多的信息,如果你可能要这样做。

    谢谢


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

    var myArray = new int[10];
    

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


    根据我的理解,在非正式定义中,值类型被本地存储到它们所定义的位置。 因此,如果在方法中定义了单个值类型,它将被存储在堆栈中。 如果它定义为类的字段,或者在这种情况下定义为数组中的项目,则“父”对象位于堆上,因此值类型也将存储在堆中。

    UPDATE

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

  • 堆栈是一个实现细节,第一部分
  • 该堆栈是一个实现细节,第二部分
  • 链接地址: http://www.djcxy.com/p/78899.html

    上一篇: Array memory Allocation clarification

    下一篇: Is a static value type field boxed in the heap in C#?