值类型是否像引用类型一样保留类型指针+同步根+静态字段?

Ant*_*hin 5 .net c# clr value-type

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

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

Sri*_*vel 2

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

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

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

无论 ValueType 还是 ReferenceType,静态字段都存储在称为“高频堆”的特殊堆中,每个 AppDomain 都有一个该堆。与“垃圾收集堆”不同,该堆不会被垃圾收集。

每个静态变量都存储在堆上,无论它是在引用类型还是值类型中声明。无论创建多少个实例,总共只有一个槽位。(不过,不需要为该插槽的存在创建任何实例。)请注意,该堆与正常的垃圾收集堆是分开的 - 它被称为“高频堆”,每个应用程序域都有一个。

以上引用来自乔恩·斯基特

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

不知道你在这里问什么。如果你指的是SyncBlock而不是Sync-Root,那么它与线程安全无关。