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

Вниз

Изменение размеров динамических массивов   Найти похожие ветки 

 
Alex_C   (2009-04-14 08:50) [0]

Информацию по этому вопросу изучил, но все же хотелось бы уточнить:
с целью избежания Memory leak при перераспределении памяти динамических массивов в операторе типа SetLength(Mas, Length(Mas)+1), предполагаю при каждом увеличении длинны массива увеличивать его сразу на 25%. Вопрос такой: правильно ли при этом пользоваться SetLength, или надо пользоваться GetMem-FreeMem? Массив порядка 3 -5 тыс записей.


 
Сергей М. ©   (2009-04-14 09:14) [1]

GetMem/FreeMem неприменимы для дин.массивов.
Только SetLength и finalize.


 
Amoeba ©   (2009-04-14 11:20) [2]


> с целью избежания Memory leak при перераспределении памяти
> динамических массивов в операторе типа SetLength(Mas, Length(Mas)+1)

Никаких утечек памяти быть не может и не будет.

А вод нехватка памяти из-за ее фрагментации - при таком многократном перераспределении памяти мелкими шажками - запросто.
По сему рекомендую использовать FastMM, что позволит избежать таких неприятностей. Кстати, он позволяет вылавливать утечки памяти. Подробности в документации.
http://sourceforge.net/projects/fastmm/
FastMM is a lightning fast replacement memory manager for Borland Delphi Win32 applications that scales well in multi-threaded applications, is not prone to memory fragmentation, and supports shared memory without the use of external .DLL files.

>
> Сергей М. ©   (14.04.09 09:14) [1]
>
> GetMem/FreeMem неприменимы для дин.массивов.
> Только SetLength и finalize.

Finalize вовсе необязательно, кроме особых случаев достаточно приравнять к nil.


 
Сергей М. ©   (2009-04-14 11:23) [3]


> Amoeba ©   (14.04.09 11:20) [2]


Равно как и сброс в nil необязателен, кроме особых случаев


 
Amoeba ©   (2009-04-14 11:34) [4]


> Сергей М. ©   (14.04.09 11:23) [3]
>
>
> > Amoeba ©   (14.04.09 11:20) [2]
>
>
> Равно как и сброс в nil необязателен, кроме особых случаев

Кто б спорил.


 
жж   (2009-04-15 00:01) [5]


> А вод нехватка памяти из-за ее фрагментации - при таком
> многократном перераспределении памяти мелкими шажками -
> запросто.


по 25 процентов то - мелкими шажками?)

а вообще если планируется постоянное изменение размеров, лучше воспользоваться уже готовыми решениями типа TList


 
MsGuns ©   (2009-04-15 00:07) [6]

Неплохо хотя бы в общих чертах освоить как в виндах происходит управление памятью. Тогда сразу подобные вопросы пропадут как класс


 
Германн ©   (2009-04-15 00:44) [7]


> жж   (15.04.09 00:01) [5]
>
> а вообще если планируется постоянное изменение размеров,
>  лучше воспользоваться уже готовыми решениями типа TList
>

Ну это как бы две разных сущности. Массив и список. Так что насчёт лучше - это слишком сильно сказано.



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1239819150
Андрей (начинающий)
2009-04-15 22:12
2009.05.31
DrawGrid и рисование


6-1203404629
stupido
2008-02-19 10:03
2009.05.31
Apache shared module


2-1239895427
Igor2010
2009-04-16 19:23
2009.05.31
WordApplication1-компонент


2-1239791422
FS
2009-04-15 14:30
2009.05.31
Оптимизация


15-1238275805
Юрий
2009-03-29 00:30
2009.05.31
С днем рождения ! 29 марта 2009 воскресенье