Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Вниз

Список записей.   Найти похожие ветки 

 
Rolf   (2006-09-14 12:58) [0]

Посоветуйте что лучше использовать для создания динамического массива рекордов - связанный список или массив указателей типа TList. Что будет быстрее работать при добавлении и удалении элементов?


 
TUser ©   (2006-09-14 13:14) [1]

При добавлении и удалении элементов будет быстрее работать связанный список.


 
MsGuns ©   (2006-09-14 13:55) [2]

1. TList не является массивом.
2. При использовании массива типизированных указателей требует либо сразу резервировать необходимое кол-во (которое часто непрогнозируемо), либо динамически его пополнять, что влечет временные затраты.
Кроме того, если какой-то элемент надо удалить, то для удаления его указателя из массива требуется перезаписать весь массив либо отметить указатель на освобожденный элемент как nil, что может усложнить логику, требуя дополнительные проверки везде, где сканируется все множество элементов.
Также без перебора нельзя определить кол-во "активных" (не nil) элементов.

Я предпочитаю пользоваться TList, предоставляя системе "возиться" с памятью.


 
MBo ©   (2006-09-14 14:21) [3]

>MsGuns ©   (14.09.06 13:55) [2]
>1. TList не является массивом.
Ну почему это вдруг?
Как раз массив внутри него и есть, только скрытый за списочным интерфейсом


 
Rolf   (2006-09-14 15:56) [4]

Чем лучше пользоваться для выделения памяти - SetLength или ReallocMem (в смысле скорости)? Как я понял SetLength cоздает новый массив целиком, а ReallocMem добавляет память к уже имеющейся. И где можно найти исходники этих функций, в system.pas чтото не нашел?


 
tesseract ©   (2006-09-14 16:03) [5]


> Ну почему это вдруг?Как раз массив внутри него и есть, только
> скрытый за списочным интерфейсом


А по-моему это связанный список с ускоряющим доступ массивом.


> Rolf   (14.09.06 15:56) [4]


Лучше сразу tList, если такие вопросы. Он оптимизирован по выделению/освобождению памяти.


 
zamtmn ©   (2006-09-14 16:16) [6]

>>А по-моему это связанный список с ускоряющим доступ массивом.
связанный список это когда есть pNext, pPrev, Data
а tList это обычный массив указателей


 
Loginov Dmitry ©   (2006-09-14 17:00) [7]

> Чем лучше пользоваться для выделения памяти - SetLength
> или ReallocMem (в смысле скорости)? Как я понял SetLength
> cоздает новый массив целиком, а ReallocMem добавляет память
> к уже имеющейся. И где можно найти исходники этих функций,
> в system.pas чтото не нашел?


Если массив динамический, или используется строка, то следует использовать процедуры SetLength.

ReallocMem используется для инициализации буфера памяти. Т.е.


type
 PDate = ^TData;
 TData = record
   B: Integer;
   I: Byte
 end;

var
 P: PData;

...
 ReallocMem(P, BuffSize); // Захват буфера памяти
 
 ReallocMem(P, NewSize); // Изменение размера буфера

 ReallocMem(P, 0); // Освобождение буфера памяти
//Для освобождения памяти можно также использовать функции
//Dispose и FreeMem



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

Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.057 c
15-1157833274
Andryk
2006-09-10 00:21
2006.10.01
Кто нибудь пользовался глянцевыми TFT мониторами?....


1-1155902119
Alkid
2006-08-18 15:55
2006.10.01
Вызов метода класса предка


15-1157969722
Александр Иванов
2006-09-11 14:15
2006.10.01
Вопрос по XPath


15-1157874177
Сергуня
2006-09-10 11:42
2006.10.01
Так к слову


1-1155860315
DDDeN
2006-08-18 04:18
2006.10.01
Сделать снимок раб. стола





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский