Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#46: 2016-02-25 16:34:42 ЛС | профиль | цитата
Будем считать, что все мы верим в непорочное зачатие.

Delete, Copy, Insert всегда создают новую строку в памяти.
Объявишь ты локальную переменную или переменную класса, или не объявишь - всё равно память под новую строку будет выделена и использована результатом.
Только при присваивании не создаётся новая строка:
#pas
var s1, s2 : string;
begin
s1 := 'Новая строка';
s2 := s1; // здесь в s2 строка не создаётся, а заносится указатель на s1[1]
end;
Так работал Pascal, так работает и DELPHI и все рассуждения об экономии памяти - лапша на уши.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 4698
Рейтинг: 426
#47: 2016-02-25 17:03:49 ЛС | профиль | цитата
Galkov писал(а):
что это связано с непредсказуемым размеров данных "строка"

Tad писал(а):
в FormatStr есть точка Fstr

Встречный вопрос г-ну Galkov: ГЛАЗА ЕСТЬ ИЛИ НЕТ
Galkov писал(а):
в каждом элементе многокаскадной обработки будут эти метры храниться

Что-то я и представить не могу задачи, в которой более двух таких элементов надо соединить последовательно. А уж где надо обрабатывать гигабайтные строки - тем более.
Вот кстати возьмем более реальный пример: компонент StrCat намного более каскадный, чем Insert, Copy и Delete. По крайней мере я лично много раз использовал последовательно два и более таких элемента (в отличие от обсуждаемой троки - ICD). Вот только в нем, ВНЕЗАПНО, точка результата присутствует.
Tad писал(а):
Delete, Copy, Insert всегда создают новую строку в памяти.

Это верно, однако побочным эффектом использование _hi_CreateEvent, к счастью, убирает из памяти промежуточные результаты. Однако побочным эффектом это не перестает быть.
карма: 10
0
Ответов: 4630
Рейтинг: 749
#48: 2016-02-25 17:22:09 ЛС | профиль | цитата
Tad писал(а):
всегда создают новую строку в памяти
Суть возражений не в том, что строка создаётся, а в том, что она хранится тогда, когда не нужна (когда не используется нижняя точка, а результат забирается из потока). Без нижней точки строка будет освобождена по завершению выдающего её события, а с нижней - только после повторного вызова метода.

А вообще, можно добавить свойство типа EnablePoint (Включить нижнюю точку). Добавляется 1-4 байта в памяти и 1 строчка кода и всё.
карма: 26

0
48
Сообщение
...
Прикрепленные файлы
(файлы не залиты)