Текущий архив: 2003.04.28;
Скачать: CL | DM;
Вниз
Является ли string динамическим массивом Найти похожие ветки
← →
Danilka © (2003-04-11 15:47) [40]Mystic © (11.04.03 15:42)
да, но почему тогда:
var
s1:string[5];
s2:string[10];
s3:string[20];
sizeOf(s1) = 6 байт
sizeOf(s1) = 11 байт
sizeOf(s1) = 21 байт
← →
Anatoly Podgoretsky © (2003-04-11 15:47) [41]А что такое +
А взглятуть в хелпе, там хорошо рассмотрено, или на крайний слчай в книге если читать не умеешь.
← →
anbezr (2003-04-11 15:49) [42]Danilka © (11.04.03 15:28)
>а вот-это уже непонятки:
>var
> s:string[15];
>sizeOf(s) = 16 байт...
все правильно 15 байт на каждый символ + 1 на длину.
← →
Anatoly Podgoretsky © (2003-04-11 15:49) [43]Danilka © (11.04.03 15:47)
С чего ты взял, что паскаль тебе будет рассказывать про выравнивание, это не кго работа. Максимум ты можешь попросить на какую границцу выравнивать, но размер то ни на грам от этого не изменится, так что Паскаль тебя не обманывает, просто ты ему не доверяешь и напрсно.
← →
Danilka © (2003-04-11 15:50) [44]мне уже можно не отвечать...
← →
anbezr (2003-04-11 15:54) [45]Anatoly Podgoretsky © (11.04.03 15:47) к чему (кому) относится.
если ко мне, то я ничего не понял
← →
Anatoly Podgoretsky © (2003-04-11 15:56) [46]К тебе, а понять поосто, взгляни хоть раз в хелп
← →
anbezr (2003-04-11 16:04) [47]опять ничего не понял. это относится к сабжу?
← →
vuk © (2003-04-11 16:19) [48]Ещё не забывайте, что если объявляются строковые переменные в процедуре, то String живет в куче, а ShortString - в стэке.
← →
Mystic © (2003-04-11 16:43) [49]> а что такое счетчик ссылок.
При присваивании строк (AnsiString) никакого копирования не происходит, а увеличивается счетчик ссылок.
Например, после выполнения команд
S1 := "12345" + "67890";
S2 := S1;
И S1 и S2 будут указывать на одну и ту же строку в памяти, "1234567890" и счетчик ссылок будет равен 2. При присваивании
S2 := "12345"
счетчик ссылок строки "1234567890" уменьшится до 1, а строка S2 будет указывать на "12345", счетчик ссылок будет равен -1 ($FFFFFFFF), так как это константная строка, которая хранится в образе EXE-Файла.
Если теперь выполнить
S1 := ""
то у строка "1234567890" счетчик ссылок станет равным 0, и она удалится из памяти. Но мы этого делать не быдет, а выполним, к примеру
S2 := S1;
FillChar(S2[1], 3, "A");
В результате и строка (1), и строка (2) станут равны "AAA34567890". Для того, чтобы изменилась только строка S2, надо выполнить вставить перед FillChar
UniqueString(S2);
после чего S2 будет указывать на уникальную строку "1234567890" (счетчик ссылок равен 1), а S1 будет указывать на другую строку "1234567890" (счетчик ссылок также равен нулю).
> Danilka © (11.04.03 15:47)
Я имел в виду тип AnsiString, обычно обозначаемый просто через string.
← →
anbezr (2003-04-11 16:56) [50]!!! класс !!!
Спасибо!
Страницы: 1 2 вся ветка
Текущий архив: 2003.04.28;
Скачать: CL | DM;
Память: 0.55 MB
Время: 0.017 c