Вверх ↑
Разработчик
Ответов: 26160
Рейтинг: 2127
#1: 2012-04-11 13:44:45 ЛС | профиль | цитата
Tad писал(а):
насколько я знаю при каждом SetLength, если длинна становится больше предыдущей, то происходит резирвирование новой памяти с достаточной длинной и "старый массив" копируется в новую память. Потом "старый массив" уничтожается.

Все правильно, так оно и работает. В любом случае, выделяется память всегда кластером, называемым грануляцией, но это значение, как правило, постоянно, и равно, ЕМНИП, 65536 байт для сиcтем Win.

hitman249 писал(а):
это ведь аналог "List"

Не все, только табличный кластерный массив использует List для хранения указателей на кластеры. Цепочный кластерный массив -- аналог нашей MT технологии, где каждый элемент цепи -- это структура, состоящая из заголовка и, собственно, самого массива, и он работает быстрее табличного
------------ Дoбавленo в 13.34:
Я просто рассмотрел алгоритм разных построений кластерного массива для создания такого же кластерного массива из дискретных элементов пакета
------------ Дoбавленo в 13.44:
Вот, собственно, аналог такого массива на рассыпухе. Работает только на увеличение, на уменьшение не позволяет один элемент, который неплохо бы допилить. Получилось что-то среднее между цепочным и табличным алгоритмом, но концепция доступа к элементам одна. При небольшой переделке можно из этой схемы сделать схему с матрицей любых допустимых данных
карма: 22

1
файлы: 1hiasm_clasterarray_001.sha [8.3KB] [248]
Голосовали:ser_davkin