代码之家  ›  专栏  ›  技术社区  ›  Captain Sensible

为什么gc.gettotalmemory()报告巨大的内存分配?

  •  7
  • Captain Sensible  · 技术社区  · 16 年前

    我一直在玩gc.gettotalmemory()。在下面的示例中,当我创建类型标题的局部变量时,所消耗的内存量将增加6276字节。这是怎么回事?

    class Program
    {
        enum Titles { Mr, Ms, Mrs, Dr };
    
        static void Main(string[] args)
        {
            GetTotalMemory();
            Titles t = Titles.Dr;
            GetTotalMemory();
        }
    
        static void GetTotalMemory()
        {
            long bytes = GC.GetTotalMemory(true);
            Console.WriteLine("{0}", bytes);
        }
    }
    
    1 回复  |  直到 16 年前
        1
  •  9
  •   Andrey    16 年前

    我认为这是因为某个地方的分配器占用了很大的内存。它将用于多个对象。试着做:

    GetTotalMemory();
    Titles t = Titles.Dr;
    GetTotalMemory();
    Titles t2 = Titles.Mr;
    GetTotalMemory();
    

    看看会发生什么。

    这就是我所看到的,gettotalmemory()并不是那么无辜:

        GetTotalMemory();
        Titles t = Titles.Dr;            
        GetTotalMemory();
    

    输出:

    12828
    19484
    

    而这:

    GetTotalMemory();
    //Titles t = Titles.Dr;            
    GetTotalMemory();
    

    输出:

    一万二千八百二十八
    一万九千四百八十四
    

    实际上,你不应该注意自由记忆的微小波动:

    耶稣对他们说,请你们施恩。 因此,凯撒认为 是凯撒的,是归神的。 那是上帝的

    :)