静态和只读成员的内存布局

时间:2014-05-26 12:15:25

标签: c# memory-management

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

编辑: 如何使用Serializion和sizeof操作?

4 个答案:

答案 0 :(得分:4)

static字段的内存(常量与否)永远不会为每个实例分配。此外,static const is not allowed - const会自动被视为每个类别一个。

conststatic readonly字段之间有differences,但其中任何一个字段都不会更改相应类的实例的占用空间。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

静态变量存储在加载程序堆中,类型信息在加载类型时存储。 这意味着在加载类型之前,不会分配静态变量的存储空间。