Учитывая, что массиву выделена фиксированная область памяти, вполне понятно, что длина массива неизменна.Как массивы обрабатываются в памяти?
Предположим, у меня есть Array [10] - это будет правильно распределять 10 слотов смежной памяти? И именно потому, что эти слоты смежны и в заранее определенных местах индексированные поисковые запросы бывают быстрыми.
Но что делать, если я помещаю сложные типы в свой массив с неравномерными размерами. Фактические объекты в массиве могут быть одного типа, но данные, которые они хранят, могут значительно отличаться по размеру.
Как это работает .Net? Я бы предположил, что он выделяет не последовательную память для хранения фактических данных в объектах, но я бы хотел получить авторитетный ответ на это. Например - использует ли он только не последовательную память, если объект превышает определенный размер? Что делать, если объект постоянно меняется по размеру, будет ли он пытаться оптимизировать местоположение хранилища?
Рассмотрим этого класса:
public class MyClass
{
public MyClass[] PotentiallyHugeNestedStructure
}
Теперь, если у меня есть массив MyClass и при запуске выполнения выделяющего к подразделам массивов и подразделы массивов. Я могу получить огромную коллекцию зубчатых массивов.
Так как же .net справится с этим, в памяти?
* Фактические объекты в массиве *?!Нет, массив содержит ссылки на расположение памяти объектов (в управляемой куче), а не на самих объектах! – user3185569
@ user3185569, так что они действительно просто упорядоченный список? –
'Фактические объекты в массиве могут быть одного типа, но данные, которые они хранят, могут значительно отличаться по размеру. Даже если данные отличаются, хранилище, выделенное для каждого индекса, одинаково (int 4 байта) до тех пор, пока выделенная память может хранить значение, хранящееся для этого блока – Sherlock