在.Net中,const和static readonly是关于内存分配的包含类的一部分吗?它们是按实例分配的(即使它们属于类型本身)?
编辑: 如何使用Serializion和sizeof操作?
答案 0 :(得分:4)
static
字段的内存(常量与否)永远不会为每个实例分配。此外,static const
is not allowed - const
会自动被视为每个类别一个。
const
和static readonly
字段之间有differences,但其中任何一个字段都不会更改相应类的实例的占用空间。
答案 1 :(得分:2)
static
成员的内存在加载类型时分配一次,因为它属于类型本身。
对于const
,它不会消耗内存,它们在运行时根本不存在,它们被烧入IL。换句话说,它们是硬编码的。
答案 2 :(得分:0)
static
个成员属于Type
,而不属于实例。 Type
本身加载在Loader Heaps
中,特别是在加载类型后HighFrequencyHeap
内。所以对于你的问题:不,它们不是按Class
的每个实例分配的。
答案 3 :(得分:0)
静态变量存储在加载程序堆中,类型信息在加载类型时存储。 这意味着在加载类型之前,不会分配静态变量的存储空间。