C#基本类型别名的结构开销?

我注意到C#中的基本类型实际上只是实现为System名称空间中定义的结构的别名,例如ulong是System.UInt64(结构类型)的别名.由此导致C#中的原始类型有额外的时空开销吗?说,乌龙真的只消耗8个字节的内存吗?

从本质上讲,这应该测试内存开销:

using System;

class Program
{
    static void Main()
    {
        long beforeAlloc = GC.GetTotalMemory(false);
        ulong[] myArray = new ulong[System.Int32.MaxValue];
        myArray[0] = 1;
        long afterAlloc = GC.GetTotalMemory(false);

        Console.WriteLine(((afterAlloc - beforeAlloc) / System.Int32.MaxValue).ToString());
     }
}

但是documentation指定GC.GetTotalMemory()方法仅检索当前认为已分配的字节数,因此,如果没有更复杂的内存探查器,是否没有简便的方法来找出?

解决方法:

结构本身没有开销.但是,运行时可以*填充任何化合物类型以进行比对优化.

有关在运行时如何处理数组的详细信息,请参见this question.

上一篇:java-如何减少Sun / Oracle JVM内部开销?


下一篇:C中“富类型”结构的开销