堆上的结构? [复制]
Posted
技术标签:
【中文标题】堆上的结构? [复制]【英文标题】: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类型的对象,对吧?
【问题讨论】:
你有没有考虑过缩进你的代码?此外,当您引用您看到或阅读的内容时,引用/链接到它通常是有意义的,因此可以与您的问题一起评估。 当你说“堆”是什么意思? (我知道这意味着什么,我想知道你认为这意味着什么)以及你为什么关心你的对象是分配在堆上、状态上还是重新分配到 CPU 中。 必读:blogs.msdn.com/b/ericlippert/archive/2010/09/30/… ***.com/questions/4853213/… , ***.com/questions/203695/… , ***.com/questions/5563774/… Jon Skeet 对这个问题的回答(6 年前)长达 3 页,这一事实应该会提示您,这比您想象的要复杂得多,而且几乎可以肯定与不再是日常开发者 【参考方案1】:你可以只使用 new 在堆上创建一个结构类型对象,对吧?
不,如果您在Main
内执行此操作,通常不会在堆上分配。不过,您可以通过多种方式在堆上分配结构,包括将其用作类中的字段、在闭包中使用等。
new Date
语法只是将结构初始化为它的默认(归零)值,但实际上并没有改变它的分配方式或位置。
【讨论】:
我不知道“你可以在堆上分配一个结构”是不是一个准确的描述。也许结构体是在堆栈上(或在寄存器中)分配的,然后装箱到堆中。【参考方案2】:new
在这种情况下与堆上的分配无关
new 运算符还用于为值类型调用默认构造函数。
http://msdn.microsoft.com/en-us/library/fa0ab757.aspx
【讨论】:
new
在任何情况下都与堆上的分配无关。
@PrestonGuillot 那么您认为在哪里创建了引用类型实例?顺便说一句,我的意思是 托管 堆。
我来自 c++ 背景,其中 new 基本上与堆相关联...这就是为什么我认为它的工作原理相同以上是关于堆上的结构? [复制]的主要内容,如果未能解决你的问题,请参考以下文章