值类型是否保持类型指针+同步根+静态字段如引用类型?

时间:2016-02-03 19:05:16

标签: c# .net clr value-type

值类型是否像引用类型一样保持类型指针+同步根+静态字段?这个问题是以下问题的扩展版本:do-value-types-have-type-objects。任何人都可以澄清:

  • 值类型是否有一个存储在CLR堆中的相关System.Type对象?
  • 如果没有关联的类型对象,则存储值类型静态字段方法
  • 值类型是否具有同步根字段(如果没有同步 root 块,则值类型是否为线程安全)?

1 个答案:

答案 0 :(得分:1)

  

值类型是否有一个存储在CLR堆中的相关类型对象?

不,没有。结构没有与之关联的标题,并且没有类型信息与其一起存储。如果您询问System.Type,是的,类型元数据将在堆中。但它不会预先创建。

  

如果没有关联,则存储值类型静态字段   在线程堆栈中键入对象?

无论ValueType或ReferenceType如何,静态字段都存储在名为"High Frequency Heap"的特殊堆中,每个AppDomain都有一个。与“Garbage Collected Heap”不同,此堆不是垃圾回收。

  

无论是否存在,每个静态变量都存储在堆上   它在引用类型或值类型中声明。只有   无论创建多少个实例,总共一个插槽​​。 (那里   不需要为该一个插槽创建任何实例   虽然。)请注意,此堆与普通垃圾分开   收集堆 - 它被称为“高频堆”,并且有   每个应用领域一个。

Above quote by Jon Skeet

  

值类型是否具有同步根字段(如果没有同步根,则值类型是否为线程安全)?

不确定你在这里问的是什么。如果你的意思是SyncBlock而不是Sync-Root,它与线程安全无关。