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