C#中的ValueType数组去堆还是栈? [复制]

Posted

技术标签:

【中文标题】C#中的ValueType数组去堆还是栈? [复制]【英文标题】:Array of ValueType in C# goes to Heap or Stack? [duplicate] 【发布时间】:2011-10-11 06:48:20 【问题描述】:

可能重复:(C#) Arrays, heap and stack and value types

我正在尝试研究 c# 中内存分配之间的一些差异

假设我有这个指令:

int[] array = new int[512];

“数组”是否进入堆?还是在 Stack 上保留 512 个整数?

【问题讨论】:

另外,blogs.msdn.com/b/ericlippert/archive/2009/05/04/… 应该是每个在内存管理语言中思考堆/堆栈的人的必修课。 docs.microsoft.com/en-us/archive/blogs/ericlippert/… Eric 博客文章的存档副本 【参考方案1】:

数组本身是在堆上分配的内存。人们会感到困惑,并认为值类型总是在堆栈中,这并不总是正确的。

例如在这个类中:

public class X

    public int Y;

虽然 Y 是一个 int(值类型),但由于它包含在一个类(引用类型)中,所以 int Y 将与对象本身一起存储,这很可能在堆上。

数组类似。 int 作为值类型包含在数组中,但数组本身在堆上,因此 int 也是。

【讨论】:

以上是关于C#中的ValueType数组去堆还是栈? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

值类型,引用类型 结合 栈,堆的理解

互操作:具有 C# COM 服务器字节数组参数的 C++ COM 客户端 - 数组是复制入/出还是直接访问?

如何在java中反转字节数组? [复制]

值类型和引用类型

c#将多个数组复制/合并到一个数组中的更好方法

无法将固定大小的字节数组从结构复制到 C# 结构中的另一个数组