Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Использование TStrnLst.Objects   Найти похожие ветки [i]

 
YT   (2004-03-22 04:49) [0]

Мастера подскажите такой момент. Мне нужно записывать дополнительную информацию(число)
в одно из свойств TStringList в конкретном случае чтобы не писать свое свойство с
типом Byte(что то типа Tag) выбрано свойство Objects(пример ниже),
так вот вопрос в записи использованной
ниже FStList.Objects[I]:=TObject(I); что будет находится реально в памяти, т.е.
сколько памяти будет выделено для каждого Iго числа(как для типа Byte или же более),
и еще при использовании данного свойства для хранения числа память как либо
необходимо освобождать или нет имеется в виду до уничтожения самого TStringList.
Написал сумбурно но думаю вы меня поняли.
var
 Form1: TForm1;
 FStList:TStringList;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
I:Byte;
begin
If  FStList=nil Then FStList:=TStringList.Create;
for I:=0 To 100 Do begin
FStList.Add(IntToStr(I));
FStList.Objects[I]:=TObject(I);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
I:Byte;
begin
If  FStList<>nil Then
for I:=0 To 100 Do
Caption:=Caption+IntToStr(Byte(FStList.Objects[I]));
end;


 
Юрий Зотов ©   (2004-03-22 05:43) [1]

1. Код верный, но в первом методе проще использовать AddObject, а во втором безопаснее Count-1.

2. Objects[i] - это дополнительное поле, связанное с i-строкой по индексу. Размер этого поля определяется размером указателя и в Win32 составляет 4 байта. В Вашем варианте можно считать, что это массив целых чисел, элементы которого автоматически добавляются и уничтожаются, когда добавляются и уничтожаются строки.

3. Отсюда вытекают ответы на Ваши вопросы:

> что будет находится реально в памяти

Число. В Вашем случае (в 16-ричном виде) - 000000XX, где XX - значение I. Правда, платформа i86 проинвертирует порядок байт и поэтому реально в памяти будет сидеть XX000000, но в данном случае нам этого учитывать не нужно.

> сколько памяти будет выделено для каждого Iго числа

Столько, сколько требуется для хранения указателя. То есть, 4 байта.

> память как либо необходимо освобождать или нет

Не надо.


 
Defunct ©   (2004-03-22 05:47) [2]

> procedure TForm1.Button1Click(Sender: TObject);
> ...
> FStList.Objects[I]:=TObject(I);

> procedure TForm1.Button2Click(Sender: TObject);
> ...
> Caption:=Caption+IntToStr(Byte(FStList.Objects[I]));

Вы присваюваете ссылке значение байта..
Будет занимать 4 байта на каждый байт. По сути вы используете поле Objects как массив, где каждый элемент занимает статически 4 байта (накая дополнительная память не выделяется, соответственно и освобождать нечего).


 
YT   (2004-03-22 07:20) [3]

Спасибо.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.041 c
1-1082963788
bon
2004-04-26 11:16
2004.04.11
TToolBar


3-1081429867
Overstep
2004-04-08 17:11
2004.04.11
Удаление файла с помощью SQL


14-1082107282
тихий вовочка
2004-04-16 13:21
2004.04.11
Тут вопрос задавали, как с джойстиками работать


3-1082025465
Flahas
2004-04-15 14:37
2004.04.11
exel..


8-1072194231
Kein
2003-12-23 18:43
2004.04.11
Описание графических форматов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский