Главная страница
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.013 c
2-1239697601
_Андрей
2009-04-14 12:26
2009.05.31
IdFTP & CreateThread


11-1201248747
Bytes
2008-01-25 11:12
2009.05.31
не могу запустить проект


2-1239704891
Franzy
2009-04-14 14:28
2009.05.31
Raise


2-1240027805
@!!ex
2009-04-18 08:10
2009.05.31
Как восстановить развертку TTreeView?


3-1215112673
Real
2008-07-03 23:17
2009.05.31
Open Office - Base