Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.20;
Скачать: CL | DM;

Вниз

Память и диначические массивы   Найти похожие ветки 

 
Barmutik ©   (2003-03-10 20:08) [0]

Здравствуйте все !

Возникала следующая проблема:

Есть тип:

TMyArray = array of Integer;

TMyRecord = record
Value: Integer;
Parents: TMyArray;
Childs: TMyArray;
end;

Есть переменная:
MyVariable: array of TMyRecord;

Вопрос:
Почему если при работе с данным массивом я произвожу приращение количества элементов по 1 то память расходуется оечнь большими порциями, хотя если я провожу пакетное единовременное расширение то всё нормально ??

К примеру:
for I := 0 to 3000 do
begin
SetLength(MyVariable, Length(MyVariable) + 1);
....
....
end;
То я теряю около 40 мегов на этой операции !!!
А если так:
SetLength(MyVariable, 3000);
for I := 0 to 3000 - 1 do
begin
MyVariable[I] := ......
end;

То всё происходит нормально и расходуется нормально как и должно 100 килов памяти.

Подскажите как быть ??? Приведённый пример служит лиш иллюстрацией и не может быть использован везде.


 
Романов Р.В. ©   (2003-03-10 20:22) [1]

При увеличении размера массива выделяется новый кусок памяти и массив копируется туда. Занимаемая ранее память освободится... потом... наверное... :)
Увеличивай размер массива с запасом. Например на 10% ненужное потом отрежешь



Страницы: 1 вся ветка

Текущий архив: 2003.03.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
1-64103
Vasechkin
2003-03-08 13:34
2003.03.20
Многопроцессная прога


14-64359
qwert-AP
2003-03-05 10:25
2003.03.20
Округления и с чем иго едят


3-63991
Roman Go
2003-02-28 10:26
2003.03.20
Есть ли отличие работы с ADO в D5 или D7


1-64085
Reals
2003-03-07 18:42
2003.03.20
Как добавить пункт меню в выпадающее по умолчанию меню TMemo?


1-64166
X3coder
2003-03-07 13:45
2003.03.20
Ну хорошо, раз незнаете synedit попробуем по другому