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