考虑以下代码:
void Main()
{
MemoryContainer mc = new MemoryContainer(0);
for (byte i = 1; i < 100; i++)
{
mc = new MemoryContainer(i);
}
}
class MemoryContainer
{
public MemoryContainer(byte someStuff) => stuff = someStuff;
byte stuff;
}
这需要为MemoryContainer分配1或100个内存吗?
答案 0 :(得分:4)
理论上,运行时不需要在堆上分配任何内存,如果它发现内存没有真正使用的话。它只需要行动就像分配内存一样。可用于确定是否可应用此优化的方法称为escape analysis。
实际上,我所知道的任何.Net运行时都会为你的代码在堆上分配100次内存。他们并不聪明,没有必要意识到这一点。
另请注意,在new
(或struct
)上使用enum
将不会在堆上分配任何内存。但这并不重要,因为你有class
,而不是struct
。