【问题标题】:Does a value type keep Type pointer + Sync root + Static fields like a reference type?值类型是否像引用类型一样保留类型指针 + 同步根 + 静态字段?
【发布时间】:2016-02-03 19:05:15
【问题描述】:

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

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

【问题讨论】:

标签: c# .net clr value-type


【解决方案1】:

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

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

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

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

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

Above quote by Jon Skeet

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2012-06-14
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
相关资源
最近更新 更多