Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2015-03-30 20:02:50 ЛС | профиль | цитата
Мои пять копеек.....

nesco писал(а):
Я уже сейчас не помню точно, давно это было. Но попадалась ситуация, когда преобразование влияло на исходную строку и дальше перла вместо исходной преобразованная строка
А я помню.
Когда пытаешься использовать WinApi (например, для UpperCase), давая ему Pchar(Str), и которое понятия не имеет про Copy-On-Write.
WinApi работает абсолютно правильно, в отличие от встроенных в Дельфи. Зато Дельфячие все знают про Copy-On-Write.

Про количество аллокаций памяти.
При работе со строками - Дельфи не так уж и туп. Он новую память выделяет "с запасом". Причем, мультипликативно, например: в два раза больше (во сколько раз конкретно - не помню). И поэтому, время на аллокацию растет логарифмически (а не линейно!) от количества прибавлений.

Tad писал(а):
При создании строки память выделяется автоматически; как только на строку не останется ни одной ссылки, память возвращается системе.
Добавлю: и ЕЩЕ "память возвращается системе", ЕСЛИ длина этой строки становится нулевой, не важно по какой причине. Строка сразу же становится nil.
Впрочем, и выделяется память не совсем сразу "при создании". Сразу при создании она категорически равна тому же nil. А вот как только длина ее ставится больше 0 -- так сразу и выделяется...

карма: 9

1
Голосовали:Netspirit