Форум: "Начинающим";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];
ВнизИзменение размеров динамических массивов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c