Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

заранее задать размер строки Setlength ?


Страницы:   1 2

Den ©   (2012-04-08 00:21:00) 

задача: ускорить выполнение кода.
есть 2 переменные s, s1:string; заранее известно что length(s1) не будет больше length(s)*2.

ну и собственно код:

while length(s)>0 do begin
s1:=s1+copy(s, 1,1)+'a';
delete(s,1,1);
end;

если заранее задать размер s1 вот так
setlength(s1, length(s)*2);
а потом присвоить значение
s1:='';
это обнулит ее length или нет? То есть будет ли s1 перезаписываться в другое место в памяти если ей начать присваивать какие-то значения?


Den   (2012-04-08 02:03:00) [21]


> Задачу озвучь, а не вопрос.


Да какая задача постоянно то там то там приходиться обрабатывать кучу строк мысли по поводу того как это ускорить навеяны вот этой статьей, http://www.delphimaster.ru/articles/dyntable/index.html

var
 s: string; //ansistring
 ch: char;
 i, N: integer;
begin
1.  S:= '';
2. for i := 1 to N do
3.    s := s + ch;
...

Первая строка - на самом деле S := nil, довольно просто. А вот третья раскладывается на выделение памяти для новой строки длины (Length(S) + 1) и копирование прежней строки в новую область памяти, после этого S указывает на эту область. И так N раз! На самом деле, в цикле еще идет вызов UniqueString, что тоже не добавляет скорости. И если выделение области памяти сравнительно быстрая операция, то время копирования прежней строки на новое место напрямую зависит от ее длины. Можно показать, что время выполнения строк 2 и 3 пропорционально N^2.


Вот и думаю как ускорить обработку строк, чтоб посмотреть хотябы насколько оно быстрее работать будет.


Германн   (2012-04-08 01:22:00) [22]

P.S.
Вот тут давеча на королевстве обсуждали:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=80799


Германн   (2012-04-08 01:18:00) [23]


> это обнулит ее length или нет? То есть будет ли s1 перезаписываться
> в другое место в памяти если ей начать присваивать какие-
> то значения?
>

1. Обнулит.
2. Считай что будет. Исключения возможны, но не обязательны.

Задачу озвучь, а не вопрос.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо