构造函数是否总是需要内存分配

时间:2017-09-08 14:05:46

标签: c# memory

考虑以下代码:

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个内存吗?

1 个答案:

答案 0 :(得分:4)

理论上,运行时不需要在堆上分配任何内存,如果它发现内存没有真正使用的话。它只需要行动就像分配内存一样。可用于确定是否可应用此优化的方法称为escape analysis

实际上,我所知道的任何.Net运行时都会为你的代码在堆上分配100次内存。他们并不聪明,没有必要意识到这一点。

另请注意,在new(或struct)上使用enum将不会在堆上分配任何内存。但这并不重要,因为你有class,而不是struct