Главная страница
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.011 c
2-1240201355
Zalum
2009-04-20 08:22
2009.05.31
Запустить одно приложение их другого


8-1194437854
zvukoff
2007-11-07 15:17
2009.05.31
как снять звук с микрофона и тут же его выводить на колонки


2-1239942805
товарищ вася
2009-04-17 08:33
2009.05.31
Вопрос про объявление


9-1179840980
ElectriC
2007-05-22 17:36
2009.05.31
Мой 1-й движок


2-1240229032
Zalum
2009-04-20 16:03
2009.05.31
Процедура из другого приложения