数组内存分配澄清
本文关键字:分配 内存 数组 | 更新日期: 2023-09-27 18:11:52
今天我正在阅读一个关于数组及其内存分配的SO线程。我找到了一个答案,它解释得很清楚,我必须说它很好。
但是在读完那个答案之后,我有了更多的问题,我一直在问自己关于我刚刚读到的东西。到目前为止,我还不能回答自己也不能谷歌它。因此,我需要你的帮助来解释这些问题给我。
- 为什么数组被创建在堆上,而它的每一个内容都是被存储在堆栈中?只是2在值类型的情况下避免装箱?
-
如果上面是真的,那么为什么数组必须首先在堆上创建2 ?
-
当他在他的回答中说,新的int[100]实际上是在堆上创建的,是400(100 * 4)字节在堆上分配?如果是,为什么?因为所有的值都被存储在堆栈
- 如果创建了1000个项目数组,那么究竟如何存储堆栈?我知道1mb是分配的堆栈大小。但在这种情况下,它将超过。那到底是什么?
如果需要,请随时添加您自己的问题或更多信息。
谢谢
当我们说数组在堆上分配时,它意味着值将在堆中。数组值不存储在堆栈中。我认为这回答了所有三个问题。
var myArray = new int[10];
上面的行在堆栈上创建myArray 变量,但是数组的内存是在堆上分配的,因此存储在其中的所有值也会在堆中。
据我所知,在非正式定义中,值类型存储在定义它们的本地。因此,如果在方法中定义了单个值类型,它将存储在堆栈中。如果它被定义为类中的字段,或者在本例中,作为数组中的项,那么'父'对象就在堆上,因此值类型也将存储在堆上。
有关值类型与引用类型和堆栈的更多详细信息,请参阅Eric Lippert的文章:
- 栈是一个实现细节,第一部分
- 栈是一个实现细节,第二部分