Процедура Move позволяет максимально быстро переместить в оперативной памяти блок данных заданного размера. Заголовок процедуры:
Move(Var Source,Dest; n:word),
где Source - имя исходного поля памяти (источник данных);
Dest - имя конечного поля памяти (приемник данных);
n - количество байтов перемещаемых данных.
Пример 1. Даны два однотипных массива. Присвоить элементам одного из этих массивов значения элементов другого массива.
TypeAr1 = array[1..1000] of real;
Var i : word;
A,B : Ar1;
Begin
A:=B;
Эту же работу можно выполнить процедурой Move(B,A,SizeOf(A)).
Эффективность обоих решений здесь одинакова, поскольку на машинном уровне компилятор конструирует в этом случае одну и ту же последовательность команд.
Пример 2. Элементам 101 .. 500 массива A присвоить значения элементов 401 .. 800 массива B.
Варианты решения:
a) Fori:=101 to500 do
a[i]:=b[i+300];
б) Move(B[401],A[101],400*SizeOf(real)).
Второй вариант более эффективен по сравнению с первым.
Пример 3. Два массива имеют одинаковый размер, один и тот же тип элементов, но описаны разными именами типа. Присвоить элементам одного массива значения элементов другого массива.
TypeAr1 = array[1..1000] of real;
Ar2 = array[1..1000] of real;
Var i : word;
A : Ar1; B : Ar2;
Begin
Варианты решения:
a) Fori:=1 to1000 do
a[i]:=b[i];
б) Move(B,A,SizeOf(A)).
Оператор присваивания A := B в данном случае недопустим, так как массивы A и B формально имеют различные имена типов.
Процедура Move эффективно работает также при сдвиге элементов массива.
Пример 4. Элементы массива A, начиная с , сдвинуть на две позиции влево.