我注意到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.