Накладные расходы на массив .NET?

Я пытался определить издержки заголовка в массиве .NET (в 32-разрядном процессе), используя этот код:

long bytes1 = GC.GetTotalMemory(false);
object[] array = new object[10000];
    for (int i = 0; i < 10000; i++)
        array[i] = new int[1];
long bytes2 = GC.GetTotalMemory(false);
array[0] = null; // ensure no garbage collection before this point

Console.WriteLine(bytes2 - bytes1);
// Calculate array overhead in bytes by subtracting the size of 
// the array elements (40000 for object[10000] and 4 for each 
// array), and dividing by the number of arrays (10001)
Console.WriteLine("Array overhead: {0:0.000}", 
                  ((double)(bytes2 - bytes1) - 40000) / 10001 - 4);
Console.Write("Press any key to continue...");
Console.ReadKey();

Результат был

    204800
    Array overhead: 12.478

В 32-битном процессе объект [1] должен быть того же размера, что и int [1], но на самом деле служебные данные увеличиваются на 3,28 байта до

    237568
    Array overhead: 15.755

Кто-нибудь знает почему?

(Кстати, если кто-нибудьЛюбопытно, что накладные расходы для объектов, не являющихся массивами, например (объект) i в цикле выше, составляет около 8 байтов (8,384). Я слышал этоs 16 байтов в 64-битных процессах.)

Ответы на вопрос(5)

Ваш ответ на вопрос