Неперемещаемые динамические массивы

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Код: Выделить всё

  Strings: array of PChar; // массив с указателями на начало строки в хранилище
  Storage: array of Byte; // хранилище строк

В данном случае думаю логично завести массив хранилищ и не перераспределять память в хранилише, а добавлять новое. Т.к. при доступе к данным через Strings пофиг лежат строки в одном или в разных Storage: array of Byte или вообще каждая строка болтается в своей персонально выделенной области.
SeZuka
постоялец
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Сообщение SeZuka »

В принципе тоже вариант. Но это уже точно похоже на менеджер памяти.
Alex2013
долгожитель
Сообщения: 3237
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Я во избежание подобных кренделей давно использую TStringList.

Код: Выделить всё

Var SL:TStringList.;
S:String;
Begin
Sl:=TStringList.Create;
Sl.Add( ' Проба силы..' );
..
S:=SL[0];
sl.free;
end.

Единственный недостаток пустая строка в конце списка при SL.Text:=S; но он там где надо легко фиксится ... Зато запись в файл и чтение из файла проводятся одной командой
SeZuka
постоялец
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Сообщение SeZuka »

Alex2013 писал(а):Я во избежание подобных кренделей давно использую TStringList.

На TStringList была самая первая реализация. В следующей реализации был отказ от TStringList и переход на массив PChar`ов с собственным алгоритмом сортировки, что позволило намного увеличить быстродействие.
Ответить