![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический 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]Последовательно