C# 类引用结构分配

C# 类引用结构分配,c#,clr,C#,Clr,让我们假设我有一个具有struct属性的类。我做了一个var foo=新foo。 foo.StructProperty在内存中的布局如何?是: 被装箱在堆上或者 包含在属于foo对象本身的堆地址空间中,就像foo.IntProperty一样? 包含在属于foo对象本身的堆地址空间中,就像foo.IntProperty一样? 这是正确的 mantra结构是在堆栈上分配的,类是在堆上分配的,这是误导性的-结构是其他对象的一部分,其他类或结构存储在用于这些对象的内存中。在这方面,int与任何其他结构类

让我们假设我有一个具有struct属性的类。我做了一个var foo=新foo。 foo.StructProperty在内存中的布局如何?是:

被装箱在堆上或者 包含在属于foo对象本身的堆地址空间中,就像foo.IntProperty一样? 包含在属于foo对象本身的堆地址空间中,就像foo.IntProperty一样? 这是正确的

mantra结构是在堆栈上分配的,类是在堆上分配的,这是误导性的-结构是其他对象的一部分,其他类或结构存储在用于这些对象的内存中。在这方面,int与任何其他结构类型都没有区别

包含在属于foo对象本身的堆地址空间中,就像foo.IntProperty一样? 这是正确的


mantra结构是在堆栈上分配的,类是在堆上分配的,这是误导性的-结构是其他对象的一部分,其他类或结构存储在用于这些对象的内存中。在这方面,int与任何其他结构类型都没有区别。

2。它位于堆上,与类本身的空间相同。也许这可以帮助您更好地理解它:2。它在堆上,与类本身的空间相同。也许这可以帮助您更好地理解它:我会说这是非常误导的。反之亦然,例如stackalloc也可能发生。@Zer0是否愿意在此基础上进行扩展?不能使用stackalloc在堆栈上分配类。您可以分配有效的数组,尽管它实际上不是数组-您只能使用指针或范围来引用它。当然可以。您可以使用不安全和stackalloc以及指针。你真的只受空间的限制。@Zer0你能给我一个使用stackalloc在堆栈上分配类的例子吗?除非你指的是…对你有用吗?我想我应该说,除非你在做一些疯狂的事情,就像我们在交易课上做的那样,这些事情通常都是乱七八糟的。我们避免像瘟疫一样。我想说,这是非常误导人的。反之亦然,例如stackalloc也可能发生。@Zer0是否愿意在此基础上进行扩展?不能使用stackalloc在堆栈上分配类。您可以分配有效的数组,尽管它实际上不是数组-您只能使用指针或范围来引用它。当然可以。您可以使用不安全和stackalloc以及指针。你真的只受空间的限制。@Zer0你能给我一个使用stackalloc在堆栈上分配类的例子吗?除非你指的是…对你有用吗?我想我应该说,除非你在做一些疯狂的事情,就像我们在交易课上做的那样,这些事情通常都是乱七八糟的。我们像躲避瘟疫一样躲避它。
class Foo
{
    public Bar StructProperty { get; set; }
    public int IntProperty { get; set; }
}

struct Bar
{
}