Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Array of byte, Подскажите. Как лучше сделать?


Страницы:   1 2

Gek1 ©   (2004-12-08 11:48:00) 

Мастера, ситуация такова! я работаю с "цепочкой byte" Вопрос как лучше обьявить ету переменную? Дело в том что длинна array of byte может колебаться от 10 байт и до 10к байт! В процессе программы переменные такого типа создаються, обрабатываються и уничтожаються! Я могу пойти в лоб и обьявить MyVar : array[0..10000] of byte! Но в процессе работы программы - такие переменные могут накапливать для дальнейшей работы, и получиться, что мой метод в лоб приведет к раздуванию программы в памяти. Как лучше обьявить такой тип?

P.S. я работаю с указателем на етот тип, где по указателю я попадаю на 1-й байт массива! Такое условие мне надо сохранить!


Gek1   (2004-12-08 13:01:00) [21]

а если я увеличиваю длинну массива? а например за ним уже лежит чтото? что произодет с массивом? он целиком с новой длинной переместиться в новое свободное место?


Digitman   (2004-12-08 12:36:00) [22]


> он будет всегда находиться в памяти с адресса PByte(@ba[0])
> и до PByte(@ba[0])+длинна?


если дин.массив имеет длину > 0, то диапазон адресов памяти, занимаемой эл-тами этого массива, равен

@ba[0] .. @ba[0] + длина_массива*размер_элемента - 1


> Фрагментироваться или еще чего-то с ним в памяти может происходить?


не может.
все элементы массива лежат в непрерывном блоке памяти в вышеупомянутом диапазоне адресов


Amoeba   (2004-12-08 12:32:00) [23]


> Gek1   (08.12.04 12:28) [7]

Да, он будет располагаться в памяти непрерывно.


Gek1   (2004-12-08 12:28:00) [24]

А еще такой вопрос:
Независимо от длинны масива - он будет всегда находиться в памяти с адресса PByte(@ba[0]) и до PByte(@ba[0])+длинна? Фрагментироваться или еще чего-то с ним в памяти может происходить?


Gek1   (2004-12-08 12:22:00) [25]

Большое спасибо.


TUser   (2004-12-08 12:14:00) [26]

procedure TForm1.Button1Click(Sender: TObject);
var ar:array of byte;
   i:integer;
   b:byte;
   pb:^byte;
begin
 SetLength(ar,100);
 for i:=0 to 99 do
   ar[i]:=i;

 for i:=0 to 99 do begin
   pb:=@ar[i];
   b:=pb^;
   memo1.Lines.Add(inttostr(b));
   end;
end;


Digitman   (2004-12-08 12:09:00) [27]


> Честно говоря я не совсем понял как, в случае динамического
> массива получиться указатель на его первый байт данных!


var
 ba: array of Byte;
..

 указатель_на_первый_байт := PByte(@ba[0]);


TUser   (2004-12-08 12:08:00) [28]


> Честно говоря я не совсем понял как, в случае динамического
> массива получиться указатель на его первый байт данных!

операцией @, но лучше пусть об этом заботится delphi


Gek1   (2004-12-08 11:57:00) [29]


> TUser

Честно говоря я не совсем понял как, в случае динамического массива получиться указатель на его первый байт данных!


TUser   (2004-12-08 11:53:00) [30]

Сделать его динамическим массивом. Почитай справку про Dynamic arrays


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо