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

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

Динамический array of record в памяти как располагается ? [D7]


Аккум ©   (2005-02-08 06:56:00) 

Последовательно рекорд за рекордом, или как попало ?


Аккум   (2005-02-09 01:17:00) [1]


> Чапаев ©   (08.02.05 09:41) [4]
> Хм... Насколько я знаю, в таком случае надо указывать не
> Move(A,...), а Move(A[0],...).

Правильно.


> icWasya ©   (08.02.05 09:49) [5]

Я просто когда код обрезал, чтобы сюда вставить, слегка напутал.

Кстати, Move - это самый быстрый способ для копирования в данном случае ? Или есть что-нибудь, что работает ещё быстрее ?


icWasya   (2005-02-08 09:49:00) [2]

И ещё.
В случае со статическими массивами, например  

Var
 HL2 : Array[0..9] of THLight2;

для Moveнет разницы между HL2 и HL2[0] и оператор

Move(Source, HR2, SizeOf(THLight2)*10); // 1

действительно перепишет Source в массив HR2. Тоже самое сделает оператор

Move(Source, HR2[0], SizeOf(THLight2)*10); // 2

А в случае с динамическим массивом

Var
 HL3 : Array  of THLight2;
...
SetLength(HL3, 10);


операторы

Move(Source, HR3, SizeOf(THLight2)*10); // 3

и

Move(Source, HR3[0], SizeOf(THLight2)*10); // 4

сделают совсем разные вещи. Оператор 4сделает то, чего Вы от него ожидали, а оператор 3в лучшем случае приведёт к Access violation. Поэтому общая рекомендация - в процедуры, требуюцие бестиповые переменные, массивы (и строки) лучше передавать в виде 2и 4.


Чапаев   (2005-02-08 09:41:00) [3]

Хм... Насколько я знаю, в таком случае надо указывать не Move(A,...), а Move(A[0],...).


MBo   (2005-02-08 08:12:00) [4]

что за переменные в Move используются, непонятно ;)
Move записей в динамическом массиве делать можно, только с учетом того, нет ли в записях динамических полей (строк, дин. массивов) и применением правильного синтаксиса.


Аккум   (2005-02-08 07:19:00) [5]


type
 THLight2 = record        
   ID   : array [0.. 3] of Char;
   Size : Integer;              
   Name : array [0..19] of Char;
 end;                          

var
 HL3 : array of THLight2;


Я могу сделать ? :
SetLength(HL3, 10);
Move(AAl.HR3, HR3, SizeOf(THLight2)*10);


Skier   (2005-02-08 06:57:00) [6]

Последовательно


Наверх

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