Давайте посмотрим, как можно использовать динамическую память для хранения больших массивов данных.
Пример 23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
type DynArray = [1..2] of real; var A : ^DinArray; n, i : word; BEGIN write('Укажите размер массива:'); readln(n); GetMem(A,n*6); . . . {$R-} for i:=1 to n do A[i]:=random; . . . {любые действия с элементами масссива} {$R+} FreeMem(A,n*6) END. |
Обратите внимание на директивы компилятора. Они используются для временного отключения проверки значения индекса массива. Количество выделяемой памяти должно быть равно произведению количества элементов массива на количество байт, отводимое под один элемент (в данном случае – под тип real отводится 6 байт).
Вся динамическая память в Турбо-Паскале рассматривается как сплошной массив байтов, называемый кучей (heap). Адрес начала кучи хранится в стандартной переменной HeapOrg, конец – в переменной HeapEnd. На начало незанятого участка динамической памяти указывает переменная-указатель HeapPtr.