Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.004 c
2-1239701746
mnj
2009-04-14 13:35
2009.05.31
Распознавание Sender


3-1221572163
Дмитрий Белькевич
2008-09-16 17:36
2009.05.31
Статистика выполнения запроса


15-1234785296
Василий Жогарев
2009-02-16 14:54
2009.05.31
MSQ SQL Server 2005


2-1239648222
CodeMaster
2009-04-13 22:43
2009.05.31
System Class STATIC


15-1238018281
Юрий
2009-03-26 00:58
2009.05.31
С днем рождения ! 26 марта 2009 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский