数组内存分配说明
今天,我正在阅读关于数组和其内存分配的SO线程。 我找到了一个整齐解释的答案,我必须说它的优秀。
但在读完这个答案之后,我又多了几个问题,我一直在问自己我读的是什么。 到目前为止,我仍然无法自己回答,也无法将其通过Google进行回答。 因此,我需要你的善意帮助向我解释这些问题。
如果上面是真的,那么为什么数组首先必须在堆上创建?
当他在回答中说新的int [100]实际上是在堆上创建的时候,是400(100 * 4)个字节分配到堆上了吗? 如果是这样,为什么? 因为所有的值都被存储在堆栈中
请随时添加您自己的问题或更多的信息,如果你可能要这样做。
谢谢
当我们说数组被分配在堆上时,这意味着数值将堆在堆中。 数组值不会存储在堆栈中。 我认为这回答了所有3个问题。
var myArray = new int[10];
上面的行在堆栈上创建myArray 变量 ,但是数组的内存分配在堆上,因此存储在其中的所有值也都堆在堆中。
根据我的理解,在非正式定义中,值类型被本地存储到它们所定义的位置。 因此,如果在方法中定义了单个值类型,它将被存储在堆栈中。 如果它定义为类的字段,或者在这种情况下定义为数组中的项目,则“父”对象位于堆上,因此值类型也将存储在堆中。
UPDATE
有关值类型与参考类型和堆栈的更多详细信息,请查看Eric Lippert的文章: