Какова структура памяти массива .NET?
Возьмем, к примеру, этот массив:
Int32[] x = new Int32[10];
Я понимаю, что основная часть массива выглядит так:
0000111122223333444455556666777788889999
Где каждый символ - один байт, а цифры соответствуют индексам в массиве.
Кроме того, я знаю, что есть ссылка на тип и индекс syncblock для всех объектов, поэтому приведенное выше можно настроить следующим образом:
ttttssss0000111122223333444455556666777788889999
^
+- object reference points here
Кроме того, необходимо сохранить длину массива, так что, возможно, это более правильно:
ttttssssllll0000111122223333444455556666777788889999
^
+- object reference points here
Это завершено? Есть ли еще данные в массиве?
Причина, по которой я спрашиваю, состоит в том, что мы пытаемся оценить, сколько памяти займет несколько различных представлений в памяти довольно большого массива данных, и размер массивов варьируется довольно немного, поэтому накладные расходы может иметь большое влияние в одном решении, но, возможно, не так сильно в другом.
Так что, в основном, для массива, сколько накладных расходов, это в основном мой вопрос.
И до того, как массивы испортятся, отряд пробудится, эта часть решения является типом статической сборки один раз-ссылка-часто, поэтому использование растущих списков здесь не обязательно.