C# 什么是;“在结构中内联分配”;值类型的平均值?

C# 什么是;“在结构中内联分配”;值类型的平均值?,c#,heap,value-type,C#,Heap,Value Type,从MSDN上看,上面写着“ “allocated inline”是否意味着可以在声明的位置之后立即分配值类型?假设它是在堆中声明的,那么它将被分配到下一个堆槽中 那它为什么说“在一个结构中” 更新 如果“structure”明确表示“struct”,为什么它没有提到任何关于“class”的内容?作为类中的字段,它不在堆栈上,也不在结构中内联(它在类中内联)。它们是在结构中内联分配的,因此是已分配给结构的内存的一部分 见: 如果您有嵌套的值类型,则内部类型将在已为包含类型分配的内存中分配 str

从MSDN上看,上面写着“

“allocated inline”是否意味着可以在声明的位置之后立即分配值类型?假设它是在堆中声明的,那么它将被分配到下一个堆槽中

那它为什么说“在一个结构中”

更新 如果“structure”明确表示“struct”,为什么它没有提到任何关于“class”的内容?作为
中的字段,它不在堆栈上,也不在
结构
中内联(它在
中内联)。

它们是在结构中内联分配的,因此是已分配给结构的内存的一部分

见:

如果您有嵌套的值类型,则内部类型将在已为包含类型分配的内存中分配

struct Inner
{
    public int A;
}

struct Outer
{
    public Inner I;
    public int B;
}

Outer o = new Outer();
o.I = new Inner();

I
的内存是内联分配的,在分配给
Outer
实例的内存中,认为结构的最简单方式是将一组存储位置用胶带粘在一起。声明变量或字段
点foo
本质上等同于说
int Point_X;int Point_Y。说
foo=barPoint
类型时,code>本质上等同于说
foo\u X=bar\u X;foo_Y=bar_Y。将结构作为值参数传递本质上等同于将其所有字段(公共和私有)作为值参数传递

有两种结构方式和一种主要是语法方式,其中结构不仅仅是一组用管道胶带粘在一起的字段:

  • 可以将结构作为“byref”参数传递,在这种情况下,系统将一个引用传递给整个存储位置组(不同于单独传递存储位置,通过值传递时会发生这种情况)。
  • 结构类型数组的每个插槽都将其所有存储位置放在一起,因此“Point foo[];”与'int foo_X[]非常不同;int foo_Y[];`。前者表示一个数组,每个元素有两个存储位置,而后者表示两个数组,每个元素有一个存储位置。
  • 可以将方法和属性与结构相关联,并定义只能通过这些方法和属性访问的结构字段,或通过对结构的所有字段一起执行赋值之类的操作来访问的结构字段。
    类类型与结构非常不同。如果一个声明了一个具有字段P和Q的类,并且一个声明了该类类型的存储位置,那么该存储位置将不会包含两个内容(P和Q)。它只保存一件事——对存储在别处的对象的引用,该对象本身具有字段P和Q。

    即使对于已分配的堆内存,也会分配固定数量的内存。值类型(对于值类型的成员)存在于分配的内存中,而不是在另一个段中分配。(由对象类型或接口类型命名的值类型在另一段中分配。)或者,实际上,作为类上的字段。不只是在一个结构上,@marcgravel-hmm,为什么这句话只说“在一个结构上”,而不是“在一个结构或一个类上”,请参阅我在中的更新question@colinfang我可能是在吹毛求疵——我把“inline”理解为“wher ever that containing thing is”,它同样适用于两者。对于类,可以说它是“内联的”,即使它总是在堆上。在结构的情况下,它最终可能是结构或堆。@MarcGravel你的意思是“在结构的情况下,它最终可能是堆栈或堆”?