【问题标题】:Memory layout of static and readonly members静态和只读成员的内存布局
【发布时间】:2014-07-15 05:13:29
【问题描述】:

在.Net 中,关于内存分配,const 和 static readonly 是包含类的一部分吗?它们是按实例分配的(即使它们属于类型本身)?

编辑: 这如何与 Serializion 和 sizeof 操作一起使用?

【问题讨论】:

标签: c# memory-management


【解决方案1】:

static 字段的内存,无论是否为常量,都不会为每个实例分配内存。此外,static const is not allowed - const 自动被视为一个类。

conststatic readonly 字段之间有differences,但它们都没有改变相应类的实例的足迹。

【讨论】:

    【解决方案2】:

    static 成员的内存在加载类型时分配一次,因为它属于类型本身。

    至于const它不会消耗内存,它们在运行时根本不存在,它们被烧成IL。换句话说,它们是硬编码的。

    【讨论】:

      【解决方案3】:

      static 类的成员属于Type,而不是实例。 Type 本身被加载到 Loader Heaps 中,特别是在加载类型后在 HighFrequencyHeap 中。所以对于您的问题:不,它们不是按Class 的实例分配的。

      【讨论】:

        【解决方案4】:

        静态变量存储在加载器堆中,在加载类型时存储类型信息。 这意味着静态变量的存储在加载它们的类型之前不会被分配。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-01
          • 2020-07-17
          • 1970-01-01
          • 2018-05-06
          • 1970-01-01
          • 1970-01-01
          • 2015-09-11
          • 2011-07-18
          相关资源
          最近更新 更多