Низове като AnsiString Free Pascal
Стандартът за низове, одобрен от Американския национален институт за стандарти (ANSI), е доста разпространен в съвременните системи за програмиране. Използва се активно от една от най-добрите среди за визуално програмиране - Delphi. Този тип данни също е включен в езика Free Pascal. Основното предимство на AnsiStrings над
с къси низове — липсата на ограничения за дължината на обработваните данни. Но това предимство има и обратна страна - работата с динамично разпределена памет е свързана със значителни разходи. Веднага след като на променлива от този тип се присвои друга стойност с дължина, различна от дължината на предишната стойност, е необходимо да се върне предишният зает ресурс и да се разпредели място за новата стойност на променливата. Това неизбежно води до появата на отделни освободени области на паметта, извършването на допълнителна работа по "събиране на боклук" и в резултат на това до забавяне на програмата.
По правило низовете с неограничена дължина се декларират с помощта на ключовата дума AnsiString:
Разликата в тактиката за разпределяне и освобождаване на памет за кратко и дълго
Линиите са показани от програмата Ansi_1 (листинг 5.11).
Списък 5 .1 1 . Програма Ansi_1
програма Ansi_1; вар
as1: AnsiString='Здравей, свят!'; ss1: String[20]='Здравей, свят!';
writeln('SizeOf(as1) = ',SizeOf(as1)); writeln('Дължина(as1) = ',Дължина(as1)); като1:=";
writeln('SizeOf(as1) = ',SizeOf(as1)); writeln('Дължина(as1) = ',Дължина(as1)); writeln('SizeOf(ss1) = ',SizeOf(ss1));
writeln('Дължина(ss1) = ',Дължина(ss1)); ss1:=";
writeln('SizeOf(ss1) = ',SizeOf(ss1)); writeln('Дължина(ss1) = ',Дължина(ss1)); readln;
Резултатите от нейната работа са показани на фиг. 5.10. Обърнете внимание, че независимо от дължината на текущата стойност, 21 байта се разпределят за променливата ss1, докато след изпразване на дългия низ as1 от него остава само четирибайтов указател.
Фиг. 5.10.Използване на памет и дължини на стойности
Константите тип AnsiString се обработват по специален начин: const
cas: AnsiString='Здравей, свят!';
Референтният брой на всяка такава константа е -1, което в машинното представяне за числа без знак (референтният брой винаги е неотрицателно число) съответства на максимално допустимата стойност. Това ви позволява да съхранявате стойностите на константите Ansi до края на изпълнението на програмата, тъй като е почти невъзможно да нулирате такъв брояч на нула.
Вторият начин за класифициране на низове като AnsiSting е чрез включване на директива. В този режим низовете, декларирани с ключовата дума Stringбез посочване на максимална дължина, също се третират от компилатора като AnsiString данни:
На низови стойности с неограничена дължина можете да извършвате всички същите операции като на къси низове. Низовите стойности от тип AnsiString могат да бъдат присвоени на променливи от тип ShortString с естествено съкращаване на резултата според максималната дължина на късата променлива. Обратните присвоявания са разрешени без никакви ограничения.
В допълнение, модулът StrUtils предоставя около 90 допълнителни функции и процедури за обработка на низове от тип AnsiString.
Източник: Кетков, Ю. Л., Свободен софтуер. БЕЗПЛАТЕН PASCAL за студенти и ученици, Ю. Л. Кетков, А. Ю. Кетков. - Санкт Петербург: BHV-Петербург, 2011. - 384 с.: ил. + CD-ROM - (IIIKT)