【问题标题】:Struct on the heap? [duplicate]堆上的结构? [复制]
【发布时间】:2014-08-14 02:10:42
【问题描述】:

所以我有这个:

class SimpleDateStructureDemo
{

  struct Date
  {
    public int year;
    public int month;
    public int day;
  }

  static void Main()
  {
    ...
  }

}

然后我看到一个例子,说对象是在堆上分配的:

Date dateMoonWalk = new Date();

我认为类是引用类型,结构是值类型。最后,你可以只使用new在堆上创建一个struct类型的对象,对吧?

【问题讨论】:

标签: c# class struct heap-memory stack-memory


【解决方案1】:

你可以只使用 new 在堆上创建一个结构类型对象,对吧?

不,如果您在Main 内执行此操作,通常不会在堆上分配。不过,您可以通过多种方式在堆上分配结构,包括将其用作类中的字段、在闭包中使用等。

new Date 语法只是将结构初始化为它的默认(归零)值,但实际上并没有改变它的分配方式或位置。

【讨论】:

  • 我不知道“你可以在堆上分配一个结构”是不是一个准确的描述。也许结构体是在堆栈上(或在寄存器中)分配的,然后装箱到堆中。
【解决方案2】:

new 在这种情况下与堆上的分配无关

new 运算符还用于值类型调用默认构造函数

http://msdn.microsoft.com/en-us/library/fa0ab757.aspx

【讨论】:

  • new 在任何情况下都与堆上的分配无关。
  • @PrestonGuillot 那么您认为在哪里创建了引用类型实例?顺便说一句,我的意思是 托管 堆。
  • 我来自 c++ 背景,其中 new 基本上与堆相关联...这就是为什么我认为它的工作原理相同
猜你喜欢
  • 2017-12-09
  • 2018-04-06
  • 1970-01-01
  • 2018-08-25
  • 2011-01-03
  • 2013-12-22
  • 2021-04-01
  • 2014-06-19
  • 2011-04-20
相关资源
最近更新 更多