繁体   English   中英

数组内存分配说明

[英]Array memory Allocation clarification

今天,我正在阅读有关数组及其内存分配的SO线程。 而且我找到了一个经过精心解释的答案 ,我必须说它很好。

但是,在阅读了该答案之后,我又遇到了几个其他问题,不断问自己关于我刚刚读过的内容的问题。 到目前为止,我仍然无法自己回答,也无法谷歌搜索它。 因此,在向我解释这些问题时,我需要您的帮助。

  1. 当数组的所有内容都存储在堆栈中时,为什么在堆上创建数组? 只是2避免在值类型的情况下装箱?
  2. 如果以上是正确的,那么为什么首先要在堆上创建2个数组?

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

  4. 如果创建了1000个项目数组,那么到底如何存储足够的堆栈? 我知道分配的堆栈大小为1 MB。 但在这种情况下,它将超过。 那么基础是什么?

如果需要,请随时添加您自己的问题或更多信息。

谢谢

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

var myArray = new int[10];

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

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

更新

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM